OAuth AppからGitHub Appへの移行

OAuth AppをGitHub Appへ移行することの利点と、GitHub MarketplaceにリストされていないOAuth Appの移行方法について学んでください。

この記事は、OAuth AppをGitHub Appに移行することを検討している既存のインテグレーターにガイドラインを提供します。

GitHub Appに切り替える理由

GitHub Appは、GitHubとの統合のための公式に推奨されている方法です。これは、純粋なOAuthベースのインテグレーションと比べて多くの利点を提供するためです。

  • GitHub Appがアクセスできる特定の情報をターゲットにする詳細な権限。権限で制限できないOAuth App以上のセキュリティポリシーの下で、より広範囲なユーザやOrganizationにアプリケーションを利用してもらうことができる。
  • 短時間有効なトークンによって、OAuthトークンよりもセキュアな認証方式を提供できる。 OAuthトークンは、OAuth Appを認可したユーザがトークンを取り消すまで、期限切れにならない。 GitHub Appsは素早く期限切れになるトークンを使用し、侵害されたトークンが利用される時間枠を小さくできる。
  • ビルトインの集中型webhookは、アプリケーションがアクセスできるすべてのリポジトリとOrganizationに対するイベントを受信する。 逆に、OAuth AppはユーザがアクセスできるそれぞれのリポジトリとOrganizationに対してwebhookを設定する必要がある。
  • ボットアカウントはGitHubのシートを消費せず、最初にアプリケーションをインストールしたユーザがOrganizationを離れてもインストールされたままにしておける。
  • OAuthのビルトインサポートは、ユーザからサーバーへのエンドポイントを使って、GitHub Appでも利用できる。
  • ボットアカウント専用のAPIレート制限は、インテグレーションとともにスケールする。
  • リポジトリの所有者は、OrganizationのリポジトリにGitHub Appをインストールできる。 GitHub Appの設定にOrganizationのリソースをリクエストする権限があれば、Organizaitionのオーナーはそのインストールを承認しなければならない。
  • Octokitライブラリや、Robotのような他のフレームワークを通じてオープンソースコミュニティのサポートがある。
  • GitHub Appを構築するインテグレーターは、APIへの早期アクセスを採用する機会がある。

OAuth AppからGitHub Appへの変換

以下のガイドラインは、GitHub Marketplaceにリストされている、あるいはされていない登録済みのOAuth Appがあることを前提としています。 高いレベルでは、以下のステップに従う必要があります。

  1. GitHub Appで利用できるAPIエンドポイントのレビュー
  2. APIレート制限内に留まるための設計
  3. 新しいGitHub Appの登録
  4. アプリケーションが必要とする権限の決定
  5. webhookのサブスクライブ
  6. 様々な認証方法の理解
  7. リポジトリにGitHub Appをインストールするようにユーザに指示
  8. 不必要なリポジトリフックの削除
  9. OAuth Appへのアクセスの取り消しをユーザに促す

GitHub Appで利用できるAPIエンドポイントのレビュー

REST APIエンドポイントとGraphQLクエリの大部分は、今日GitHub Appから利用できますが、まだいくつかのエンドポイントは有効にする過程にあります。 利用可能なRESTエンドポイントをレビューして、必要なエンドポイントがGitHub Appと互換性があることを確認してください。 GitHub Appで利用できるAPIエンドポイントの中には、ユーザの代わりにアプリケーションが動作できるようにするものがあることに注意してください。 GitHub Appがユーザとして認証されるようにするエンドポイントのリストについては、「ユーザからサーバーへのリクエスト」を参照してください。

必要なAPIエンドポイントのリストのレビューは、できるだけ早く行うことをおすすめします。 まだGitHub Appから利用できないエンドポイントで必要なものがある場合は、サポートにお知らせください。

APIレート制限内に留まるための設計

GitHub Appはレート制限に対するスライディングルールを利用します。これは、Organization中のリポジトリ及びユーザ数に基づいて増加できます。 また、GitHub AppはGraphQL V4を利用することで、条件リクエストあるいは統合リクエストを利用することもできます。

新しいGitHub Appの登録

GitHub Appへ切り替えすることを決めたら、新しいGitHub Appを作成しなければなりません。

アプリケーションが必要とする権限の決定

GitHub Appを登録する際には、アプリケーションのコードが使用する各エンドポイントが必要とする権限を選択しなければなりません。 GitHub Appで利用できる各エンドポイントが必要とする権限のリストについては「GitHub Appの権限」を参照してください。

GitHub Appの設定で、アプリケーションがそれぞれの権限の種類についてNo AccessRead-onlyRead & Writeアクセスを必要とするかを指定できます。 詳細な権限を使用することで、アプリケーションは必要なデータのサブセットにターゲットを絞ってアクセスできるようになります。 必要な機能を提供する、可能な限り最小の権限セットを指定することをおすすめします。

webhookのサブスクライブ

新しいGitHub Appを作成し、その権限を選択したら、サブスクライブさせたいwebhookイベントを選択できます。 webhookをサブスクライブする方法を学ぶには、「GitHub Appの権限を編集する」を参照してください。

様々な認証方法の理解

GitHub Appは、短時間で期限切れとなるトークンベースの認証を主に利用し、期限切れにならないOAuthトークンよりも高いセキュリティを提供します。 利用可能な様々な認証方法と、それらをいつ使う必要があるかを理解しておくことが重要です。

  • JSON Web Token (JWT)GitHub Appとして認証されます。 たとえば、JWTで認証を受けてアプリケーションのインストールの詳細をフェッチしたり、JWTインストールアクセストークンと交換したりできます。
  • インストールアクセストークンは、GitHub Appの特待のインストールとして認証されます(これはサーバーからサーバーへのリクエストとも呼ばれます)。 たとえば、インストールアクセストークンで認証を受けて、Issueをオープンしたり、Pull Requestにフィードバックを提供したりできます。
  • OAuthアクセストークンGitHub Appのユーザとして認証を受けることができます(ユーザからサーバーへのリクエストとも呼ばれます)。 たとえば、GitHub Appがユーザのアイデンティティを検証したり、ユーザの代わりに振る舞わなければならない場合に、OAuthアクセストークンを使ってユーザとして認証を受けることができます。

最も一般的なシナリオは、インストールアクセストークンを使って特定のインストールとして認証を受けることです。

リポジトリにGitHub Appをインストールするようにユーザに指示

OAuth AppからGitHub Appへの移行をしたら、GitHub Appがインストールできるようになったことをユーザに知らせなければなりません。 たとえば、アプリケーション中の行動喚起のバナーに、GitHub Appのインストールリンクを含めることができます。 移行を容易にするために、GitHub Appのインストールフローを通じて存在する、ユーザもしくはOrganizationアカウントを特定するクエリパラメータを使い、OAuth Appがアクセスできた任意のリポジトリを事前選択しておけます。 こうすることで、ユーザはすでにアクセスできるリポジトリにGitHub Appを容易にインストールできるようになります。

クエリパラメータ
名前説明
suggested_target_id必須: GitHub AppをインストールしようとしているユーザもしくはOrganizationのID。
repository_ids[]リポジトリIDの配列。 省略された場合、すべてのリポジトリが選択されます。 事前選択できるリポジトリ数は、最大で100です。
URLの例
https://github.com/apps/YOUR_APP_NAME/installations/new/permissions?suggested_target_id=ID_OF_USER_OR_ORG&repository_ids[]=REPO_A_ID&repository_ids[]=REPO_B_ID

YOUR_APP_NAMEをGitHub Appの名前で、ID_OF_USER_OR_ORGをターゲットユーザもしくはOrganizationのIDで置き換え、最大で100個のリポジトリID(REPO_A_ID及びREPO_B_ID)を含めなければなりません。 OAuth Appがアクセスできるリポジトリのリストを取得するには、認証されたユーザのためのリポジトリのリスト及びOrganizationのリポジトリのリストエンドポイントを使ってください。

不必要なリポジトリフックの削除

GitHub Appがリポジトリにインストールされたら、従来のOAuth Appによって作成された不要なwebhookを削除する必要があります。 どちらのアプリケーションも同じリポジトリにインストールされていると、ユーザにとっては機能が重複するかもしれません。 webhookを削除するには、repositories_addedアクションのinstallation_repositories webhookを待ち受け、それらのリポジトリ上にOAuth Appによって作成されたリポジトリwebhookを削除できます。

OAuth Appへのアクセスの取り消しをユーザに促す

GitHub Appのインストールベースが増大してきたら、ユーザに従来のOAuthインテグレーションへのアクセスを取り消すように促すことを検討してください。

このドキュメントは役立ちましたか?プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

問題がまだ解決していませんか?

GitHubコミュニティで質問するサポートへの連絡