Skip to main content
ドキュメントには� �繁に更新が� えられ、その都度公開されています。本ページの翻訳はま� 未完成な部分があることをご了承く� さい。最新の情� �については、英語のドキュメンテーションをご参照く� さい。本ページの翻訳に問題がある� �合はこちらまでご連絡く� さい。

このバージョンの GitHub Enterprise はこの日付をもって終了となりました: 2022-06-03. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの改善、新機能のためには、最新バージョンのGitHub Enterpriseにアップグレードしてく� さい。 アップグレードに関する支援については、GitHub Enterprise supportに連絡してく� さい。

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

GitHub Appは、Issueの作成、デプロイメントの作成、サポートされている他のエンドポイントの利用など、アクションをユーザの代わりに行うことができます。

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

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アイデンティティのリクエスト

ブラウザで次のURLに移動するようユーザに指示します。

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

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

パラメータ

名前種類説明
client_idstring必� �。GitHub App のクライアント IDです。 アプリケーションを選択したときに、GitHub App 設定に表示されます。 注釈: アプリケーション ID とクライアント ID は同一ではなく、お互いを置き換えることはできません。
redirect_uristring認可の後にユーザが送られるアプリケーション中のURL。 This must be an exact match to one of the URLs you provided as a Callback URL when setting up your GitHub App and can't contain any additional parameters.
statestringこれはフォージェリアタックを防ぐためにランダ� な文字列を含める必要があり、あらゆる任意のデータを含めることができます。
loginstringサインインとアプリケーションの認可に使われるアカウントを指示します。
allow_signupstringOAuthフローの間に、認証されていないユーザに対してGitHubへのサインアップの選択肢が提示されるかどうか。 デフォルトは true です。 ポリシーでサインアップが禁止されている� �合はfalseを使ってく� さい。

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

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

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

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

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

ユーザトークンの期限設定は、現在のところオプション機能であり、変更される可能性があります。 To opt-in to the user-to-server token expiration feature, see "Activating optional features for apps."

アクセストークンを受け取るため、次のエンドポイントをリクエストします。

POST http(s)://[hostname]/login/oauth/access_token

パラメータ

名前種類説明
client_idstring必� �。GitHub App のクライアント ID。
client_secretstring必� �。GitHub App のクライアントシークレット。
コードstring必� �。 ステップ1でレスポンスとして受け取ったコード。
redirect_uristring認可の後にユーザが送られるアプリケーション中のURL。 This must be an exact match to one of the URLs you provided as a Callback URL when setting up your GitHub App and can't contain any additional parameters.
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 http(s)://[hostname]/api/v3/user

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

curl -H "Authorization: token OAUTH-TOKEN" http(s)://[hostname]/api/v3/user

デバイスフロー

注釈: デバイスフローは現在パブリックベータであり、変更されることがあります。

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

For more information about authorizing users using the device flow, see "Authorizing OAuth Apps."

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

ユーザの 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 は、このイベントをサブスクライブ解除できません。 誰でも、自分のGitHubアカウント設定ページからGitHub Appの認可を取り消すことができます。 GitHub Appの認可を取り消しても、そのGitHub Appはアンインストールされません。 GitHub Appは、このwebhookを受信したら、トークンを取り返した人の代わりにAPIを呼ぶことを止めるようにプログラ� しなければなりません。 取り消されたアクセストークンを使い続けると、GitHub Appは401 Bad Credentialsエラーを受け取ることになります。

ユーザレベルの権限

ユーザ認可フローの一環として、個々のユーザに付与されたユーザのメールなどのユーザが所有するリソースにアクセスできる、ユーザレベルの権限を GitHub App に付与できます。 User-level permissions differ from repository and organization-level permissions, which are granted at the time of installation on an organization or personal account.

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

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

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

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

While most of your API インタラクションのほとんどは、サーバーからサーバーへのインストールアクセストークンを用いて行われますが、一部のエンドポイントでは、ユーザアクセストークンを使用し、API 経由でアクションを実行できます。 Your app can make the following requests using GraphQL or REST endpoints.

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

チェックラン

チェックスイート

行動規範

デプロイメントステータス

デプロイメント

イベント

フィード

Git Blob

Gitのコミット

Git参照

Gitタグ

Gitツリー

gitignoreテンプレート

インストール

Issueにアサインされた人

Issueコメント

Issueイベント

Issueのタイ� ライン

Issue

ラベル

ライセンス

Markdown

メタ情� �

マイルストーン

Organizationのフック

Organizationのメンバー

Organizationの外部コラボレータ

Organization pre-receive フック

OrganizationのTeamのプロジェクト

OrganizationのTeamリポジトリ

Organization Team

Organization

プロジェクトのコラボレータ

プロジェクト

Pull Requestのコメント

Pull Requestのレビューイベント

Pull Requestのレビューのリクエスト

Pull Requestのレビュー

Pulls

リアクション

リポジトリ

リポジトリのアクティビティ

リポジトリのブランチ

リポジトリのコラボレータ

リポジトリのコミットコメント

リポジトリのコミット

リポジトリのコミュニティ

リポジトリのコンテンツ

リポジトリのイベントのディスパッチ

リポジトリのフック

リポジトリの招待

リポジトリのキー

リポジトリのPages

リポジトリ pre-receive フック

リポジトリのリリース

リポジトリ統計

ルート

ステータス

Teamディスカッション

Topics

ユーザのメール

ユーザのフォロワー

ユーザのGPGキー

ユーザの公開鍵

ユーザ