ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。
GitHub AE is currently under limited release. Please contact our Sales Team to find out more.

GitHub App のユーザの特定と認可

Your GitHub App can perform actions on behalf of a user, like creating an issue, creating a deployment, and using other supported endpoints.

ここには以下の内容があります:

ノート: ユーザトークンの期限設定は、現在オプションの機能であり、変更されることがあります。 ユーザからサーバーに対するトークンの期限設定にオプトインもしくはアウトするには、「アプリケーションのオプション機能を有効化する」を参照してください。 詳しい情報については「ユーザからサーバーへのアクセストークンの期限設定」を参照してください。

GitHub App がユーザの代わりに動作すると、ユーザからサーバーに対するリクエストを実行します。 こうしたリクエストは、ユーザのアクセストークンで承認される必要があります。 ユーザからサーバーに対するリクエストには、特定のユーザに対してどのリポジトリを表示するか決定するなど、ユーザに対するデータのリクエストが含まれます。 これらのリクエストには、ビルドの実行など、ユーザがトリガーしたアクションも含まれます。

ユーザからサーバーへのアクセストークンをさらにセキュアにするために、8時間後に期限切れとなるアクセストークンと、新しいアクセストークンと交換できるリフレッシュトークンを使用できます。 詳しい情報については「ユーザからサーバーへのアクセストークンのリフレッシュ」を参照してください。

サイト上のユーザを特定する

ブラウザで動作する標準的なアプリケーションでユーザを認可するには、Web アプリケーションフローを利用してください。

CLI ツールや Git 認証情報マネージャーなどの、ブラウザに直接アクセスしないヘッドレスアプリケーションでユーザを認可するには、デバイスフローを利用します。 デバイスフローは、OAuth 2.0 Device Authorization Grant を利用します。

Web アプリケーションフロー

Web アプリケーションフローを利用して、サイト上のユーザを特定するプロセスは以下の通りです。

  1. ユーザはGitHubのアイデンティティをリクエストするためにリダイレクトされます
  2. ユーザはGitHubによってサイトにリダイレクトして戻されます
  3. GitHub Appはユーザのアクセストークンで API にアクセスします

アプリケーションを作成または変更する際に [Request user authorization (OAuth) during installation] を選択した場合、アプリケーションのインストール中にステップ 1 が完了します。 詳しい情報については、「インストール中のユーザの認可」を参照してください。

1. ユーザのGitHubアイデンティティのリクエスト

GET http(s)://[hostname]/login/oauth/authorize

GitHub Appがloginパラメータを指定すると、ユーザに対して利用できる特定のアカウントでサインインしてアプリケーションを認可するよう求めます。

パラメータ
名前種類説明
client_idstring必須。GitHub App のクライアント IDです。 アプリケーションを選択したときに、GitHub App 設定に表示されます。
redirect_uristring認可の後にユーザが送られるアプリケーション中のURL。 これは、GitHub App をセットアップする際に[User authorization callback URL] フィールドで指定された URL と一致させる必要があり、他の追加パラメータを含めることはできません。
statestringこれはフォージェリアタックを防ぐためにランダムな文字列を含める必要があり、あらゆる任意のデータを含めることができます。
loginstringサインインとアプリケーションの認可に使われるアカウントを指示します。
allow_signupstringWhether or not unauthenticated users will be offered an option to sign up for GitHub during the OAuth flow. デフォルトは true です。 ポリシーでサインアップが禁止されている場合はfalseを使ってください。

注釈: 認可リクエストにスコープを指定する必要はありません。 従来の OAuth とは異なり、認証トークンはGitHub App に紐付けられた権限およびユーザの権限に限定されます。

2. ユーザはGitHubによってサイトにリダイレクトして戻されます

ユーザがリクエストを受け付けると、GitHub は一時的なコードを code パラメータに、そして前のステップで渡された状態を state パラメータに入れてリダイレクトさせ、サイトに戻します。 状態が一致しない場合、そのリクエストは第三者が作成したものであり、プロセスを中止する必要があります。

注釈: アプリケーションを作成または変更する際に [Request user authorization (OAuth) during installation] を選択した場合、GitHub はアクセストークンと交換する必要がある一時的な code を返します。 アプリケーションのインストール中に GitHub が OAuth フローを開始した場合、state パラメータは返されません。

この code をアクセストークンと交換します。 トークンの期限設定が有効になっている場合、アクセストークンは 8 時間で期限切れとなり、リフレッシュトークンは 6 か月で期限切れとなります。 トークンを更新するたびに、新しいリフレッシュトークンを取得します。 詳しい情報については、「ユーザからサーバーに対するアクセストークンをリフレッシュする」を参照してください。

ユーザトークンの期限設定は、現在のところオプション機能であり、変更される可能性があります。 ユーザからサーバーに対するトークンの期限設定にオプトインするには、「アプリケーションのオプション機能を有効化する」を参照してください。

POST http(s)://[hostname]/login/oauth/access_token
パラメータ
名前種類説明
client_idstring必須。GitHub App のクライアント ID。
client_secretstring必須。GitHub App のクライアントシークレット。
コードstring必須。 ステップ1でレスポンスとして受け取ったコード。
redirect_uristring認可の後にユーザが送られるアプリケーション中のURL。 これは、GitHub App をセットアップする際に[User authorization callback URL] フィールドで指定された URL と一致させる必要があり、他の追加パラメータを含めることはできません。
statestringステップ1で提供した推測できないランダムな文字列。
レスポンス

デフォルトでは、レスポンスは以下の形式になります。 レスポンスパラメータの expires_inrefresh_tokenrefresh_token_expires_in は、ユーザからサーバに対するアクセストークンの期限設定を有効にしている場合にのみ返されます。

{
  "access_token": "e72e16c7e42f292c6912e7710c838347ae178b4a",
  "expires_in": 28800,
  "refresh_token": "r1.c1b4a2e77838347a7e420ce178f2e7c6912e1692",
  "refresh_token_expires_in": 15811200,
  "scope": "",
  "token_type": "bearer"
}

3. GitHub Appはユーザのアクセストークンで API にアクセスします

ユーザのアクセストークンを使用すると、GitHub App がユーザの代わりに API にリクエストを発行できます。

Authorization: token OAUTH-TOKEN
GET https://api.[hostname]/user

たとえば、curlでは以下のようにAuthorizationヘッダを設定できます。

curl -H "Authorization: token OAUTH-TOKEN" https://api.[hostname]/user

デバイスフロー

デバイスフローを使えば、CLIツールやGit認証情報マネージャーなどのヘッドレスアプリケーションのユーザを認可できます。

デバイスフローを使ったユーザの認可については、「OAuth App の認可」を参照してください。

ユーザがアクセスできるインストールされたリソースの確認

ユーザの OAuth トークンを取得したら、そのユーザがアクセスできるインストールされたアプリケーションを確認できます。

Authorization: token OAUTH-TOKEN
GET /user/installations

また、インストールされたアプリケーションでユーザがアクセスできるリポジトリも確認できます。

Authorization: token OAUTH-TOKEN
GET /user/installations/:installation_id/repositories

詳細については、ユーザアクセストークンがアクセスできるインストールされたアプリケーションの一覧表示およびユーザアクセストークンがアクセスできるリポジトリの一覧表示でご確認ください。

GitHub App の認可の取り消し処理

ユーザが GitHub App の認可を取り消した場合、アプリケーションはデフォルトで github_app_authorization webhook を受信します。 GitHub App は、このイベントをサブスクライブ解除できません。 Anyone can revoke their authorization of a GitHub App from their GitHub account settings page. Revoking the authorization of a GitHub App does not uninstall the GitHub App. You should program your GitHub App so that when it receives this webhook, it stops calling the API on behalf of the person who revoked the token. If your GitHub App continues to use a revoked access token, it will receive the 401 Bad Credentials error.

ユーザレベルの権限

ユーザ認可フローの一環として、個々のユーザに付与されたユーザのメールなどのユーザが所有するリソースにアクセスできる、ユーザレベルの権限を GitHub App に付与できます。 ユーザレベルの権限は、Organization またはユーザアカウントにインストールされる際に付与される、リポジトリおよび Organization レベルの権限とは異なります。

ユーザレベルの権限は、[Permissions & webhooks] ページの [User permissions] セクションにある GitHub App の設定で選択できます。 権限の選択に関する詳しい情報については、「GitHub Appの権限の編集」を参照してください。

ユーザが自分のアカウントにアプリケーションをインストールする時、インストールプロンプトは、アプリケーションがリクエストするユーザレベルの権限を一覧表示し、アプリケーションがこれらの権限を個々のユーザに求めることができるということを説明します。

ユーザレベルの権限は個々のユーザに付与されるため、ユーザにアップグレードを促すことなく、既存のアプリケーションに権限を追加できます。 ただし、新しい権限を認可し、ユーザからサーバーに対するトークンを取得するため、ユーザ認可フローを通じて既存のユーザを送信する必要があります。

ユーザからサーバーへのリクエスト

While most of your API インタラクションのほとんどは、サーバーからサーバーへのインストールアクセストークンを用いて行われますが、一部のエンドポイントでは、ユーザアクセストークンを使用し、API 経由でアクションを実行できます。 GraphQL v4 または REST v3 エンドポイントを使用して、アプリケーションは次のリクエストを行うことができます。

対応しているエンドポイント

チェックラン
チェックスイート
行動規範
デプロイメントステータス
デプロイメント
イベント
フィード
Git Blob
Gitのコミット
Git参照
Gitタグ
Gitツリー
gitignoreテンプレート
インストール
Issueにアサインされた人
Issueコメント
Issueイベント
Issueのタイムライン
Issue
ラベル
ライセンス
Markdown
メタ情報
マイルストーン
Organizationのフック
Organizationのメンバー
Organizationの外部コラボレータ
OrganizationのTeamのプロジェクト
OrganizationのTeamリポジトリ
Organization Team
Organization
プロジェクトのコラボレータ
プロジェクト
Pull Requestのコメント
Pull Requestのレビューイベント
Pull Requestのレビューのリクエスト
Pull Requestのレビュー
Pull Request
リアクション
リポジトリ
リポジトリのアクティビティ
リポジトリのブランチ
リポジトリのコラボレータ
リポジトリのコミットコメント
リポジトリのコミット
リポジトリのコミュニティ
リポジトリのコンテンツ
リポジトリのイベントのディスパッチ
リポジトリのフック
リポジトリの招待
リポジトリのキー
リポジトリのPages
リポジトリのリリース
リポジトリ統計
ルート
検索
ステータス
Teamディスカッション
Topics
ユーザのフォロワー
ユーザのGPGキー
ユーザの公開鍵
ユーザ

Did this doc help you?

Privacy policy

Help us make these docs great!

All GitHub docs are open source. See something that's wrong or unclear? Submit a pull request.

Make a contribution

OR, learn how to contribute.