Skip to main content

ユーザーに代わって GitHub アプリで認証する

GitHub App は、issue の作成、コメントの投稿、デプロイの作成などのアクションをユーザーの代わりに実行できます。

アプリは、ユーザーに代わって API 要求を行うことができます。 アプリがユーザーに代わって行った API 要求は、そのユーザーに帰属します。 たとえば、アプリがユーザーに代わってコメントを投稿した場合、GitHub UI には、ユーザーのアバター写真とアプリのアイデンティコン バッジがイシューの作成者として表示されます。

アプリのアイデンティコン バッジがオーバーレイされたユーザー アバターがあるコメントのスクリーンショット。 アバターがオレンジ色の枠線で強調表示されています。

同様に、要求によって監査ログとセキュリティ ログ内の対応するエントリがトリガーされた場合、ログにはユーザーがアクターとして一覧表示されますが、"programmatic_access_type" が "GitHub App user-to-server token" であると示されます。

ユーザーに代わって API 要求を行うには、ユーザーがアプリを承認する必要があります。 複数のメンバーを含む organization にアプリがインストールされている場合は、アプリがメンバーに代わって操作する前に、各メンバーがアプリを認可する必要があります。 ユーザーがアプリを承認するためにアプリをインストールする必要はありません。

ユーザーがアカウントにアプリをインストールすると、アプリが要求したリソースへのアクセス許可が付与されます。 インストール プロセスの間に、アプリが個々のユーザーに対して要求できるアカウント アクセス許可の一覧も表示されます。 ユーザーは、アプリを承認するときに、ユーザーの代わりに動作するためのアクセス許可をアプリに付与し、アプリから要求されたアカウント アクセス許可を付与します。

ユーザーがアプリを承認したら、OAuth トークンの一種であるユーザー アクセス トークンを生成できます。 後続の API 要求の Authorization ヘッダーにあるユーザー アクセス トークンを送信する必要があります。 ユーザーにアプリの認可を求め、ユーザー アクセス トークンを生成する方法の詳細については、「GitHub アプリのユーザー アクセス トークンの生成」を参照してください。

ユーザーに代わって操作する場合、安全で適切なアクセスを確保するため、アプリのアクセスは制限されます。

  • アプリは、そのユーザーがアクセスできるリソースにのみアクセスできます。 ユーザーがリポジトリへのアクセス権を持っていない場合、アプリがそのリポジトリにインストールされている場合でも、アプリはユーザーに代わってそのリポジトリにアクセスすることはできません。
  • アプリは、アクセス許可を持つリソースにのみアクセスできます。 アプリに Issues アクセス許可がない場合、ユーザーがリポジトリにアクセスできる場合でも、アプリはユーザーの issue を作成したり読み取ったりすることはできません。
  • アプリは、インストールされているアカウント内のリソースにのみアクセスできます。 アプリがユーザーの個人用アカウントにのみインストールされている場合、その organization にもアプリがインストールされていない限り、そのユーザーが所属する organization のリソースにアクセスすることはできません。

ユーザー アクセス トークンを使用して行われた要求は、"ユーザーからサーバーへの" 要求と呼ばれることもあります。

トークンは、トークンのオーナーと同様に、リソースにアクセスしてそれらのリソースに対してアクションを実行できますが、さらに、トークンに付与されるスコープまたはアクセス許可によって制限されます。 トークンは、ユーザーに追加のアクセス権を付与できません。

アプリのアクティビティをユーザーではなくアプリに帰属させる場合は、代わりにアプリのインストールとして認証する必要があります。 詳しくは、「GitHub App インストールとしての認証」をご覧ください。

メモ

GitHub App を承認した後に自分の Organization で所有しているリソースを表示できないことがユーザーから報告され、その Organization で SAML SSO を使用している場合、再認証する前に、Organization のアクティブな SAML セッションを開始するようにユーザーに指示します。 詳細については、GitHub Enterprise Cloud ドキュメントの「SAML と GitHub Apps」を参照してください。