About GitHub Apps and OAuth apps
일반적으로 GitHub Apps은(는) OAuth apps보다 선호됩니다. GitHub Apps은(는) 세분화된 사용 권한으로 사용자가 앱이 액세스할 수 있는 리포지토리를 더 잘 제어할 수 있으며 수명이 짧은 토큰을 사용합니다. 이러한 속성은 앱의 자격 증명이 유출된 경우에 발생 가능한 손상을 제한하여 앱의 보안을 강화할 수 있습니다.
OAuth apps와(과) 마찬가지로 GitHub Apps은(는) 여전히 OAuth 2.0을 사용하고 OAuth 토큰 유형(사용자 액세스 토큰)을 생성하여 사용자 대신 작업을 수행할 수 있습니다. 그러나 GitHub Apps은(는) 사용자와 독립적으로 작동할 수도 있습니다. 이는 사용자 입력이 필요하지 않은 자동화 작업에 유용합니다. 조직에 앱을 설치한 사람이 조직을 떠나더라도 앱은 계속 작동합니다.
GitHub Apps에는 기본 제공되는 중앙 집중식 웹후크가 있습니다. GitHub Apps은(는) 앱이 액세스할 수 있는 모든 리포지토리 및 조직에 대한 웹후크 이벤트를 수신할 수 있습니다. 반대로 OAuth apps에서는 각 리포지토리 및 조직에 대해 개별적으로 웹후크를 구성해야 합니다.
설치 액세스 토큰을 사용하는 GitHub Apps의 트래픽률 제한은 리포지토리 수와 조직 사용자 수로 확장됩니다. 반대로 OAuth apps은(는) 트래픽률 제한이 낮으며 확장되지 않습니다.
OAuth app이(가) GitHub App보다 선호되는 경우가 있습니다. 엔터프라이즈 개체 자체와 같은 엔터프라이즈 수준 리소스에 액세스해야 하는 경우, GitHub App은(는) 아직 엔터프라이즈에 대한 권한을 부여할 수 없으므로 OAuth app을(를) 사용해야 합니다. GitHub Apps은(는) 엔터프라이즈 소유의 조직 및 리포지토리 리소스에 계속 액세스할 수 있습니다.
GitHub Apps에 대한 자세한 내용은 "GitHub 앱 만들기 정보"을(를) 참조하세요.
기존 OAuth app을(를) GitHub App(으)로 마이그레이션하는 방법에 대한 자세한 내용은 "OAuth 앱을 GitHub 앱으로 마이그레이션"을(를) 참조하세요.
누가 GitHub Apps를 설치하고 OAuth apps에 권한을 부여할 수 있나요?
개인 계정 또는 소유한 조직에 GitHub 앱을 설치할 수 있습니다. 리포지토리에 관리자 권한이 있는 경우 조직 계정에 GitHub 앱을 설치할 수 있습니다. GitHub 앱이 리포지토리에 설치되어 있고 조직 권한이 필요한 경우 조직 소유자가 애플리케이션을 승인해야 합니다.
기본적으로 조직의 소유자만 조직에서 GitHub 앱의 설정을 관리할 수 있습니다. 추가 사용자가 조직에서 소유한 GitHub 앱의 개발자 설정을 변경할 수 있도록 소유자가 GitHub 앱 관리자 권한을 부여할 수 있습니다. GitHub 앱 관리자는 제3자 응용 프로그램을 관리할 수 없습니다. 조직에서 GitHub 앱 관리자를 추가하고 제거하는 방법에 대한 자세한 내용은 "조직의 역할"을 참조하세요.
반대로 사용자는 OAuth apps에 권한을 부여하여 앱에 인증된 사용자 역할을 하는 역할을 부여합니다. 예를 들어 인증된 사용자에 대한 모든 알림을 찾는 OAuth app에 권한을 부여할 수 있습니다. 언제든지 OAuth app에서 권한을 철회할 수 있습니다.
조직 소유자는 외부 협력자가 승인되지 않은 OAuth apps 및 GitHub Apps에 대한 액세스를 요청할 수 있도록 허용할지 여부를 선택할 수 있습니다. 자세한 내용은 "OAuth 앱 및 GitHub 앱 액세스 요청 제한"을(를) 참조하세요.
경고: OAuth app에서 모든 권한을 취소하면 배포 키를 포함하여 애플리케이션이 사용자를 대신하여 생성한 모든 SSH 키가 삭제됩니다.
GitHub 앱 | OAuth apps |
---|---|
조직에 GitHub 앱을 설치하려면 조직 소유자이거나 리포지토리의 관리자 권한이 있어야 합니다. GitHub 앱이 리포지토리에 설치되어 있고 조직 권한이 필요한 경우 조직 소유자가 애플리케이션을 승인해야 합니다. | OAuth app에 리소스에 대한 액세스 권한을 부여할 수 있습니다. |
개인 리포지토리에 GitHub 앱을 설치할 수 있습니다. | OAuth app에 리소스에 대한 액세스 권한을 부여할 수 있습니다. |
GitHub 앱을 제거하고 GitHub 앱의 액세스 권한을 제거하려면 조직 소유자, 개인 리포지토리 소유자여야 하거나 리포지토리의 관리자 권한이 있어야 합니다. | OAuth 액세스 토큰을 삭제하여 액세스를 제거할 수 있습니다. |
GitHub 앱 설치를 요청하려면 조직 소유자이거나 리포지토리의 관리자 권한이 있어야 합니다. | 조직 애플리케이션 정책이 활성화된 경우 모든 조직 구성원은 조직에 OAuth app을 설치하도록 요청할 수 있습니다. 조직 소유자는 요청을 승인하거나 거부해야 합니다. |
GitHub 앱 및 OAuth apps은(는) 무엇에 액세스할 수 있나요?
계정 소유자는 다른 계정에 대한 액세스 권한을 부여하지 않고 한 계정에서 GitHub App을 사용할 수 있습니다. 예를 들어 고용주 조직에 타사 빌드 서비스를 설치할 수 있지만 개인 계정의 리포지토리에 대한 해당 빌드 서비스 액세스 권한을 부여하지 않을 수 있습니다. GitHub 앱을 설정한 사람이 조직을 떠나는 경우 앱이 설치된 상태로 유지됩니다.
권한이 부여된 OAuth app에는 사용자 또는 조직 소유자의 액세스 가능한 모든 리소스에 대한 액세스 권한이 있습니다.
GitHub 앱 | OAuth apps |
---|---|
GitHub 앱을 설치하면 앱에 선택한 사용자 또는 조직 계정의 리포지토리에 대한 액세스 권한이 부여됩니다. | OAuth app에 권한을 부여하면 앱에 액세스 가능한 사용자의 리소스에 대한 액세스 권한을 부여하게 됩니다. 예를 들어 그들이 액세스할 수 있는 리포지토리가 있습니다. |
관리자가 설치에서 리포지토리를 제거하면 GitHub 앱의 설치 토큰이 리소스에 액세스할 수 없게 됩니다. | OAuth 액세스 토큰은 사용자가 리포지토리에 대한 쓰기 권한을 잃을 때와 같이 액세스 권한이 손실될 때 리소스에 대한 액세스 권한을 잃게 됩니다. |
설치 액세스 토큰은 앱 작성자가 선택한 권한이 있는 지정된 리포지토리로 제한됩니다. | OAuth 액세스 토큰은 범위를 통해 제한됩니다. |
GitHub 앱은 리포지토리의 실제 콘텐츠에 액세스하지 않고도 문제 및 끌어오기 요청에 대한 별도 액세스를 요청할 수 있습니다. | OAuth apps에서 문제, 끌어오기 요청 또는 리포지토리가 소유한 모든 항목에 액세스하려면 repo 범위를 요청해야 합니다. |
GitHub 앱에는 조직 애플리케이션 정책이 적용되지 않습니다. GitHub 앱은 조직 소유자가 부여한 리포지토리에만 액세스할 수 있습니다. | 조직 애플리케이션 정책이 활성화된 경우 조직 소유자만 OAuth app 설치 권한을 부여할 수 있습니다. 설치된 경우 OAuth app은(는) 승인된 조직 내에서 조직 소유자가 보유한 토큰에 표시되는 모든 것에 대한 액세스 권한을 얻습니다. |
GitHub 앱은 설치가 변경되거나 제거될 때 웹후크 이벤트를 받습니다. 이렇게 하면 앱 작성자가 조직의 리소스에 대한 액세스 권한을 더 많거나 적게 받았을 때 알 수 있습니다. | OAuth apps은(는) 사용자의 변경된 액세스 권한 부여에 따라 언제든지 조직 또는 리포지토리에 대한 액세스 권한을 잃을 수 있습니다. OAuth app은(는) 리소스에 대한 액세스 권한이 손실될 때 사용자에게 알리지 않습니다. |
토큰 기반 식별
참고: GitHub 앱은 사용자 기반 토큰을 사용할 수도 있습니다. 자세한 내용은 "사용자를 대신하여 GitHub 앱으로 인증"을(를) 참조하세요.
GitHub 앱 | OAuth apps |
---|---|
GitHub 앱은 JSON 웹 토큰 형식이 대역 외인 프라이빗 키를 사용하여 설치 액세스 토큰을 요청할 수 있습니다. | OAuth app은(는) 웹 요청을 통해 리디렉션한 후 요청 토큰을 액세스 토큰으로 교환할 수 있습니다. |
설치 토큰은 @jenkins-bot처럼 앱을 GitHub 앱 봇으로 식별합니다. | 액세스 토큰은 @octocat처럼 앱에 토큰을 부여한 사용자로 앱을 식별합니다. |
설치 액세스 토큰은 미리 정의된 시간(현재 1시간) 후에 만료됩니다. | OAuth 토큰은 고객이 철회할 때까지 활성 상태로 유지됩니다. |
조직 또는 리포지토리에 설치된 GitHub Apps은(는) 설치 횟수에 따라 크기가 조정되는 속도 제한이 적용됩니다. 자세한 내용은 "GitHub 앱의 트래픽률 제한"을(를) 참조하세요. | OAuth 토큰은 사용자의 트래픽률 제한(시간당 5,000개 요청)을 사용합니다. |
속도 제한 증가는 GitHub 앱 수준(모든 설치에 영향을 줌) 및 개별 설치 수준에서 부여할 수 있습니다. | 트래픽률 제한 증대는 OAuth app에 따라 허용됩니다. 해당 OAuth app에 부여된 모든 토큰은 증가된 제한을 받습니다. |
GitHub Apps은(는) 사용자를 대신해 인증할 수 있습니다. 권한을 부여하는 흐름은 OAuth app 권한 부여 흐름과 동일합니다. 사용자 액세스 토큰은 만료될 수 있으며 새로 고침 토큰으로 갱신할 수 있습니다. 자세한 내용은 "사용자 액세스 토큰 새로 고침" 및 "사용자를 대신하여 GitHub 앱으로 인증"을(를) 참조하세요. | OAuth apps에서 사용하는 OAuth 흐름으로 사용자를 대신하여 OAuth app에 권한을 부여합니다. GitHub App 사용자 액세스 토큰을 생성하는 데 사용되는 흐름과 동일합니다. |
리소스의 사용 권한 수준 요청
OAuth apps과(와) 달리 GitHub 앱에는 필요한 권한에 대해서만 액세스를 요청할 수 있는 대상 권한이 있습니다. 예를 들어 CI(연속 통합) GitHub 앱은 리포지토리 콘텐츠에 대한 읽기 권한을 요청하고 상태 API에 대한 쓰기 권한을 요청할 수 있습니다. 또 다른 GitHub 앱은 코드에 대한 읽기 또는 쓰기 권한을 가질 수 없지만 여전히 문제, 레이블 및 마일스톤을 관리할 수 있습니다. OAuth apps은(는) 세분화된 권한을 사용할 수 없습니다.
Access | GitHub 앱(read 또는 write 권한) | OAuth apps |
---|---|---|
퍼블릭 리포지토리에 대한 액세스 | 설치하는 동안 퍼블릭 리포지토리를 선택해야 합니다. | public_repo 범위입니다. |
리포지토리 코드/콘텐츠에 대한 액세스 | 리포지토리 콘텐츠 | repo 범위입니다. |
문제, 레이블 및 마일스톤에 대한 액세스 | 문제 | repo 범위입니다. |
끌어오기 요청, 레이블 및 마일스톤에 대한 액세스 | 끌어오기 요청 | repo 범위입니다. |
커밋 상태에 대한 액세스(CI 빌드의 경우) | 커밋 상태 | repo:status 범위입니다. |
배포 및 배포 상태에 대한 액세스 | 배포 | repo_deployment 범위입니다. |
웹후크를 통한 이벤트 수신 | GitHub 앱에는 기본적으로 웹후크가 포함됩니다. | write:repo_hook 또는 write:org_hook 범위입니다. |
리포지토리 검색
GitHub 앱 | OAuth apps |
---|---|
GitHub 앱은 /installation/repositories 를 보고 설치에서 액세스할 수 있는 리포지토리를 확인할 수 있습니다. | OAuth apps은(는) 액세스 가능한 리포지토리에 대한 사용자 보기의 경우 /user/repos 를, 조직 보기의 경우 /orgs/:org/repos 를 확인할 수 있습니다. |
GitHub 앱은 리포지토리가 설치에서 추가되거나 제거될 때 웹후크를 받습니다. | OAuth apps은(는) 조직 내에서 새 리포지토리를 만들 때 알림에 대한 조직 웹후크를 만듭니다. |
웹후크
GitHub 앱 | OAuth apps |
---|---|
기본적으로 GitHub 앱에는 액세스 권한이 있는 모든 리포지토리에 대해 수신하도록 구성된 이벤트를 수신하는 단일 웹후크가 있습니다. | OAuth apps은(는) 이벤트를 수신하는 데 필요한 리포지토리마다 리포지토리 웹후크를 만들기 위해 웹후크 범위를 요청합니다. |
GitHub 앱은 조직 구성원의 권한이 있는 특정 조직 수준 이벤트를 받습니다. | OAuth apps은(는) 조직 수준 이벤트를 수신하는 데 필요한 조직마다 조직 웹후크를 만들기 위해 조직 웹후크 범위를 요청합니다. |
GitHub 앱을 제거하면 웹후크가 자동으로 비활성화됩니다. | OAuth app의 액세스 토큰이 삭제되고 자동으로 정리할 방법이 없으면 웹후크가 자동으로 비활성화되지 않습니다. 사용자에게 이 작업을 수동으로 수행하도록 요청해야 합니다. |
Git 액세스
GitHub 앱 | OAuth apps |
---|---|
GitHub 앱은 리포지토리 콘텐츠 권한을 요청하고 설치 액세스 토큰을 사용하여 HTTP 기반 Git을 통해 인증합니다. 자세한 내용은 "GitHub 앱에 대한 설치 액세스 토큰 생성"을 참조하세요. | OAuth apps이 write:public_key 범위를 요청하고 API를 통해 배포 키를 만듭니다. 그런 다음 해당 키를 사용하여 Git 명령을 수행할 수 있습니다. |
토큰은 HTTP 암호로 사용됩니다. | 토큰은 HTTP 사용자 이름으로 사용됩니다. |
컴퓨터 계정과 봇 계정 비교
머신 사용자 계정은 GitHub의 사용자 시스템을 사용하여 자동화된 시스템을 분리하는 OAuth 기반 개인 계정입니다.
반면 봇 계정은 GitHub 앱과 관련이 있으며 모든 GitHub 앱에 기본 제공됩니다.
GitHub 앱 | OAuth apps |
---|---|
GitHub 앱 봇은 GitHub Enterprise 사용자를 사용하지 않습니다. | 컴퓨터 사용자 계정은 GitHub Enterprise 사용자를 사용합니다. |
GitHub 앱 봇에는 암호가 부여되지 않으므로 고객은 직접 로그인할 수 없습니다. | 컴퓨터 사용자 계정에는 고객에 의해 관리 및 보호될 사용자 이름과 암호가 부여됩니다. |