GitHub App 설치로 인증 정보
GitHub App이(가) 계정에 설치되면 API 요청에 대한 앱 설치로 인증할 수 있습니다. 이렇게 하면 앱에 필요한 리포지토리 액세스 및 권한이 부여된 한 앱이 해당 설치가 소유한 리소스에 액세스할 수 있습니다. 앱 설치에서 수행한 API 요청은 앱에 기인합니다. GitHub 앱 설치에 대한 자세한 내용은 "GitHub 앱 설치"를 참조하세요.
예를 들어 앱이 "octo-org"라는 organization 소유한 프로젝트에서 문제의 필드를 변경 Status
하려면 앱의 octo-org 설치로 인증합니다. 문제의 타임라인 앱이 상태 업데이트했음을 명시합니다.
API 요청을 설치로 만들려면 먼저 설치 액세스 토큰을 생성해야 합니다. 그런 다음, 후속 API 요청의 헤더에 Authorization
설치 액세스 토큰을 보냅니다. GitHub의 Octokit SDK를 사용하여 설치 액세스 토큰을 생성할 수도 있습니다.
REST API 엔드포인트가 GitHub App 설치 액세스 토큰과 함께 작동하는 경우 해당 엔드포인트에 대한 REST 참조 설명서에 "GitHub Apps에서 작동"이 표시됩니다. 또한 앱에는 엔드포인트를 사용하는 데 필요한 권한이 있어야 합니다. 자세한 내용은 "Choosing permissions for a GitHub App"을 참조하세요.
앱 설치는 GraphQL API를 사용할 수도 있습니다. REST API와 마찬가지로 앱에는 GraphQL API의 개체에 액세스할 수 있는 특정 권한이 있어야 합니다. GraphQL 요청의 경우 앱에 수행하려는 GraphQL 쿼리 및 변형에 필요한 권한이 있는지 앱을 테스트해야 합니다.
설치 액세스 토큰을 사용하여 HTTP 기반 Git 액세스를 인증할 수도 있습니다. 앱에 "콘텐츠" 리포지토리 권한이 있어야 합니다. 그런 다음 설치 액세스 토큰을 HTTP 암호로 사용할 수 있습니다. 를 설치 액세스 토큰()git clone https://x-access-token:TOKEN@github.com/owner/repo.git"
으로 바꿉다TOKEN
.
설치 액세스 토큰을 사용하여 수행한 요청을 "서버-서버" 요청이라고도 합니다.
앱 설치 대신 사용자를 대신하여 앱으로 인증하는 방법에 대한 자세한 내용은 "사용자를 대신하여 GitHub 앱 인증"을 참조하세요.
설치 액세스 토큰을 사용하여 앱 설치로 인증
설치 액세스 토큰을 사용하여 설치로 인증하려면 먼저 REST API를 사용하여 설치 액세스 토큰을 생성합니다. 그런 다음 REST API 또는 GraphQL API 요청의 헤더에 Authorization
해당 설치 액세스 토큰을 사용합니다. 설치 액세스 토큰은 1시간 후에 만료됩니다.
설치 액세스 토큰 생성
-
앱에 대한 JWT(JSON 웹 토큰)를 생성합니다. 자세한 내용은 "AUTOTITLE"을 참조하세요.
-
인증할 설치의 ID를 가져옵니다.
웹후크 이벤트에 응답하는 경우 웹후크 페이로드에 설치 ID가 포함됩니다.
REST API를 사용하여 앱 설치에 대한 ID를 찾을 수도 있습니다. 예를 들어 , ,
GET /repos/{owner}/{repo}/installation``GET /orgs/{org}/installation
또는GET /app/installations
엔드포인트를GET /users/{username}/installation
사용하여 설치 ID를 가져올 수 있습니다. 자세한 내용은 "AUTOTITLE"을 참조하세요. -
REST API
POST
요청을 에 보냅니다/app/installations/INSTALLATION_ID/access_tokens
. 요청의 헤더에 JSON 웹 토큰을Authorization
포함합니다. 를 인증하려는 설치의 ID로 바꿉INSTALLATION_ID
니다.예를 들어 이 curl 요청을 보냅니다. 를 설치 ID로 바꾸고
JWT
를 JSON 웹 토큰으로 바꿉INSTALLATION_ID
니다.curl --request POST \ --url "https://HOSTNAME/api/v3/app/installations/INSTALLATION_ID/access_tokens" \ --header "Accept: application/vnd.github+json" \ --header "Authorization: Bearer JWT"
필요에 따라 또는
repository_ids
본문 매개 변수를repositories
사용하여 설치 액세스 토큰이 액세스할 수 있는 개별 리포지토리를 지정할 수 있습니다. 또는repository_ids
를 사용하여repositories
특정 리포지토리에 대한 액세스 권한을 부여하지 않으면 설치 액세스 토큰은 설치에 액세스 권한이 부여된 모든 리포지토리에 액세스할 수 있습니다. 설치 액세스 토큰은 설치에 대한 액세스 권한이 부여되지 않은 리포지토리에 대한 액세스 권한을 부여할 수 없습니다.필요에 따라 본문 매개 변수를
permissions
사용하여 설치 액세스 토큰에 있어야 하는 권한을 지정합니다. 가 지정되지 않은 경우permissions
설치 액세스 토큰에는 앱에 부여된 모든 권한이 있습니다. 설치 액세스 토큰은 앱에 부여되지 않은 권한을 부여할 수 없습니다.응답에는 설치 액세스 토큰, 토큰이 만료되는 시간, 토큰에 있는 권한 및 토큰이 액세스할 수 있는 리포지토리가 포함됩니다. 설치 액세스 토큰은 1시간 후에 만료됩니다.
이 엔드포인트에 대한 자세한 내용은 "AUTOTITLE"을 참조하세요.
참고: 대부분의 경우
Authorization: Bearer
또는Authorization: token
을 사용하여 전달할 수 있습니다. 그러나 JWT(JSON 웹 토큰)를 전달하는 경우Authorization: Bearer
를 사용해야 합니다.
설치 액세스 토큰으로 인증
설치 액세스 토큰을 사용하여 인증하려면 API 요청의 헤더에 Authorization
포함합니다. 액세스 토큰은 GraphQL API와 REST API 모두에서 작동합니다.
앱에는 엔드포인트를 사용하는 데 필요한 권한이 있어야 합니다. 자세한 내용은 "Choosing permissions for a GitHub App"을 참조하세요.
다음 예제에서 를 설치 액세스 토큰으로 바꿉 INSTALLATION_ACCESS_TOKEN
다.
curl --request GET \
--url "https://HOSTNAME/api/v3/meta" \
--header "Accept: application/vnd.github+json" \
--header "Authorization: Bearer INSTALLATION_ACCESS_TOKEN"
Octokit.js SDK를 사용하여 앱 설치로 인증
GitHub의 Octokit.js SDK를 사용하여 앱 설치로 인증할 수 있습니다. SDK를 사용하여 인증하는 한 가지 이점은 JWT(JSON 웹 토큰)를 직접 생성할 필요가 없다는 것입니다. 또한 SDK는 설치 액세스 토큰을 다시 생성하므로 1시간 만료에 대해 걱정할 필요가 없습니다.
Octokit.js 라이브러리를 사용하려면 를 설치하고 가져와 octokit
야 합니다. 다음 예제에서는 ES6에 따라 import 문을 사용합니다. 다양한 설치 및 가져오기 방법에 대한 자세한 내용은 Octokit.js 추가 정보 사용 섹션을 참조하세요.
Octokit.js 사용하여 설치 ID로 인증
-
앱의 ID를 가져옵니다. 앱의 설정 페이지에서 앱의 ID를 찾을 수 있습니다. 사용자 소유 앱의 경우 설정 페이지는 입니다
https://github.com/settings/apps/APP-SLUG
. organization 소유 앱의 경우 설정 페이지는 입니다https://github.com/organizations/ORGANIZATION/settings/apps/APP-SLUG
. 을 앱의 슬러그 이름으로 바꿉APP-SLUG
있습니다. 을 organization 슬러그 이름으로 바꿉ORGANIZATION
있습니다. 예:https://github.com/organizations/octo-org/settings/apps/octo-app
. -
프라이빗 키를 생성합니다. 자세한 내용은 "GitHub 앱에 대한 프라이빗 키 관리.
-
인증할 설치의 ID를 가져옵니다.
웹후크 이벤트에 응답하는 경우 웹후크 페이로드에 설치 ID가 포함됩니다.
REST API를 사용하여 앱 설치에 대한 ID를 찾을 수도 있습니다. 예를 들어 , ,
GET /repos/{owner}/{repo}/installation``GET /orgs/{org}/installation
또는GET /app/installations
엔드포인트를GET /users/{username}/installation
사용하여 설치 ID를 가져올 수 있습니다. 자세한 내용은 "GitHub 앱. -
에서
octokit
가져옵니다App
.App
의 새 인스턴스를 만듭니다. 다음 예제에서 를 앱 ID에 대한 참조로 바꿉APP_ID
니다. 를 앱의 프라이빗 키에 대한 참조로 대체PRIVATE_KEY
합니다.JavaScript import { App } from "octokit"; const app = new App({ appId: APP_ID, privateKey: PRIVATE_KEY, });
-
메서드를
getInstallationOctokit
사용하여 인증된octokit
instance 만듭니다. 다음 예제에서 를 대신 인증하려는 앱 설치의 ID로 바꿉INSTALLATION_ID
니다.JavaScript const octokit = await app.getInstallationOctokit(INSTALLATION_ID);
-
메서드를
octokit
사용하여 API를 요청합니다.앱에는 엔드포인트를 사용하는 데 필요한 권한이 있어야 합니다. 자세한 내용은 "Choosing permissions for a GitHub App"을 참조하세요.
예를 들어 GraphQL API를 요청하려면 다음을 수행합니다.
JavaScript await octokit.graphql(` query { viewer { login } } `)
예를 들어 REST API를 요청하려면 다음을 수행합니다.
JavaScript await octokit.request("GET /meta")
Octokit.js 사용하여 웹후크 이벤트에 대한 응답으로 인증
또한 Octokit.js SDK는 미리 인증된 octokit
instance 웹후크 이벤트 처리기에 전달합니다.
-
앱의 ID를 가져옵니다. 앱의 설정 페이지에서 앱의 ID를 찾을 수 있습니다. 사용자 소유 앱의 경우 설정 페이지는 입니다
https://github.com/settings/apps/APP-SLUG
. organization 소유 앱의 경우 설정 페이지는 입니다https://github.com/organizations/ORGANIZATION/settings/apps/APP-SLUG
. 을 앱의 슬러그 이름으로 바꿉APP-SLUG
있습니다. 을 organization 슬러그 이름으로 바꿉ORGANIZATION
있습니다. 예:https://github.com/organizations/octo-org/settings/apps/octo-app
. -
프라이빗 키를 생성합니다. 자세한 내용은 "GitHub 앱에 대한 프라이빗 키 관리.
-
앱 설정에서 지정한 웹후크 비밀을 가져옵니다. 웹후크 비밀에 대한 자세한 내용은 "Using webhooks with GitHub Apps.
-
에서
octokit
가져옵니다App
.App
의 새 인스턴스를 만듭니다. 다음 예제에서 를 앱 ID에 대한 참조로 바꿉APP_ID
니다. 를 앱의 프라이빗 키에 대한 참조로 대체PRIVATE_KEY
합니다. 를 앱의 웹후크 비밀로 바꿉니다WEBHOOK_SECRET
.JavaScript import { App } from "octokit"; const app = new App({ appId: APP_ID, privateKey: PRIVATE_KEY, webhooks: { WEBHOOK_SECRET }, });
-
메서드를
app.webhooks.*
사용하여 웹후크 이벤트를 처리합니다. 자세한 내용은 추가 정보 Octokit.js 웹후크 섹션을 참조하세요. 예를 들어 문제가 열릴 때 문제에 대한 주석을 만들려면 다음을 수행합니다.app.webhooks.on("issues.opened", ({ octokit, payload }) => { await octokit.request("POST /repos/{owner}/{repo}/issues/{issue_number}/comments", { owner: payload.repository.owner.login, repo: payload.repository.name, issue_number: payload.issue.number, body: `This is a bot post in response to this issue being opened.`, } ) });