Skip to main content

このバージョンの GitHub Enterprise はこの日付をもって終了となります: 2023-01-18. 重大なセキュリティの問題に対してであっても、パッチリリースは作成されません。 パフォーマンスの向上、セキュリティの向上、新機能の向上を図るために、最新バージョンの GitHub Enterprise にアップグレードします。 アップグレードに関するヘルプについては、GitHub Enterprise サポートにお問い合わせください

GitHub アプリと OAuth アプリとの微妙な違い

GitHub Apps と OAuth Apps の違いについて知っておくと、どちらのアプリケーションを作成するかを決めるために役立ちます。 OAuth App は GitHub ユーザとして振る舞う一方、GitHub App は Organization または Organization 内のリポジトリにインストールされた場合、自らのアイデンティティを用います。

GitHub App のインストール、OAuth App の承認が可能なユーザ

GitHub App は、個人アカウントおよび自分が所有する Organization にインストールできます。 リポジトリの管理者権限がある場合には、GitHub App を Organization のアカウントにインストールできます。 GitHub App がリポジトリにインストールされていて、Organization の権限を要求している場合、Organization のオーナーはアプリケーションを承認する必要があります。

デフォルトでは、Organization内のGitHub Appsの設定を管理できるのはOrganizationのオーナーだけです。 Organization内のGitHub Appsを管理できるユーザを追加するには、管理者がそのユーザにGitHub Appの管理者権限を許可します。 組織内の GitHub App マネージャーを追加および削除する方法については、「GitHub App マネージャー」を参照してください。

一方、ユーザーが OAuth アプリを 認可 すると、認証されたユーザーとして動作する機能がアプリに提供されます。 たとえば、認証されたユーザに対するすべての通知を検索する OAuth App を承認できます。 OAuth App の権限はいつでも取り消すことができます。

警告: OAuth App からすべてのアクセス許可を取り消すと、ユーザーの代わりにアプリケーションで生成されたすべての SSH キー (デプロイ キーを含む) が削除されます。

GitHub アプリOAuth アプリの比較
Organization に GitHub App をインストールするには、Organization のオーナーであるか管理者権限を所有している必要があります。 GitHub App がリポジトリにインストールされていて、Organization の権限を要求している場合、Organization のオーナーはアプリケーションを承認する必要があります。OAuth App を認証し、リソースへのアクセス権限を与えることができます。
GitHub App は個人のリポジトリにインストールできます。OAuth App を認証し、リソースへのアクセス権限を与えることができます。
GitHub App をアンインストールしてアクセス権限を削除するには、Organization のオーナーであるか、個人リポジトリの所有者であるか、リポジトリの管理者権限を所有している必要があります。OAuth アクセストークンを削除して、アクセス権限を削除することができます。
GitHub App のインストールを要求するには、Organization のオーナーであるかリポジトリの管理者権限を所有している必要があります。Organization のアプリケーションポリシーが有効である場合、その Organization の任意のメンバーが OAuth App のインストールを要求できます。 Organization のオーナーは、その要求を承認または拒否する必要があります。

GitHub App と OAuth App がアクセスできるリソース

アカウントの所有者は、別のアカウントにアクセス権限を与えることなく GitHub App を使用できます。 たとえば、サードパーティ製のビルドサービスを従業員の Organization にインストールしつつ、そのビルドサービスに個人アカウントにあるリポジトリへのアクセスを許可しないことができます。 GitHub App をセットアップした人が Organization から離れても、その GitHub App はインストールされたままになります。

認可された OAuth アプリは、ユーザーまたは組織の所有者がアクセス可能なすべてのリソースにアクセスできます。

GitHub アプリOAuth アプリの比較
GitHub アプリをインスールすると、アプリはユーザーまたは組織アカウントの選択されたリポジトリにアクセスできるようになります。OAuth アプリを認可すると、アプリはユーザーがアクセスできるリソースにアクセスできるようになります。 たとえば、リポジトリにアクセスできます。
管理者がインストールからリポジトリを削除した場合、GitHub App のインストールトークンはリソースにアクセスできなくなります。リポジトリへの書き込みアクセスを失ったときなど、ユーザがアクセスを失ったとき、OAuth アクセストークンはリソースにアクセスできなくなります。
インストール アクセス トークンは、アプリケーションの作成者が選択したアクセス許可を所有する、指定されたリポジトリに制限されます。OAuth アクセス トークンは、スコープで制限されます。
GitHub App は、リポジトリの実際のコンテンツにアクセスすることなく、Issue やプルリクエストへの個別のアクセスを要求できます。OAuth アプリでイシュー、pull request、リポジトリが所有するリソースにアクセスするには、repo スコープを要求する必要があります。
GitHub アプリは組織のアプリケーション ポリシーの対象ではありません。 GitHub アプリは組織の所有者が許可したリポジトリにのみアクセスできます。組織のアプリケーション ポリシーがアクティブな場合、組織の所有者のみが OAuth アプリのインストールを認可できます。 OAuth アプリがインストールされている場合、アプリは承認された組織内で組織の所有者が所持しているトークンで表示できるすべてのものにアクセスできます。
GitHub App は、インストールが変更または削除されると webhook イベントを受信します。 これにより、アプリケーションの作者は、GitHub App の Organization のリソースに対するアクセス権が変更されたことがわかります。OAuth App は、付与したユーザのアクセス権が変更されると、Organization やリポジトリへのアクセス権を失います。 OAuth App は、リソースへのアクセス権を失った際にも通知を行いません。

トークンベースの識別

注: GitHub アプリでは、ユーザー ベースのトークンを使用することもできます。 詳細については、「GitHub アプリのユーザーの特定と認可」を参照してください。

GitHub アプリOAuth アプリの比較
GitHub App は、JSON Web トークンフォーマットのアウトオブバンドで秘密鍵を使用することにより、インストールアクセストークンをリクエストできます。OAuth App は、Web リクエストを通じてリダイレクトされた後にリクエストトークンをアクセストークンに交換できます。
インストール トークンは、アプリを GitHub アプリのボット (@jenkins-bot など) として識別します。アクセス トークンは、アプリをそのアプリにトークンを付与したユーザー (@octocat など) として識別します。
インストールトークンは、事前に定義された時間 (現在は 1 時間) が経過すると期限切れになります。OAuth トークンは、顧客によって取り消されるまで有効となります。
組織またはリポジトリにインストールされた GitHub Appsは、サーバー間要求のレート制限の対象となります。 詳細については、「GitHub Appsのレート制限」を参照してください。OAuth トークンでは、ユーザーのレート制限として、1 時間あたり 5,000 個の要求が使用されます。
レート制限の増加は、GitHub アプリ レベル (すべてのインストールに影響) と個々のインストール レベルの両方で許可できます。レート制限の増加は、OAuth アプリごとに許可されます。 その OAuth アプリに許可されたトークンはすべて、制限が増加します。
GitHub Appsでは、ユーザーの代わりに認証を行うことができます。これは、ユーザーからサーバーへの要求と呼ばれます。 認可するフローは OAuth アプリの認可フローと同じです。 ユーザーからサーバーへのトークンは期限切れになることがあり、更新トークンで更新できます。 詳細については、「ユーザーからサーバーへのアクセス トークンの更新」および「GitHub アプリのユーザーの特定と認可」を参照してください。OAuth Apps により使用される OAuth フローでは、ユーザの代わりに OAuth App を承認します。 これは、GitHub App ユーザからサーバーに対する承認で用いられるフローと同じです。

リソースに対する権限レベルのリクエスト

OAuth App と異なり、GitHub App には必要なアクセス権のみをリクエストできる、ターゲットを絞った権限があります。 たとえば、継続的インテグレーション (CI) GitHub App は、リポジトリコンテンツへの読み取りアクセスと、ステータス API への書き込みアクセスをリクエストできます。 別の GitHub App では、コードへの読み取りおよび書き込みアクセスを持たせずに、Issue、ラベル、マイルストーンを管理させることが可能です。 OAuth アプリでは、詳細なアクセス許可は使用できません。

AccessGitHub アプリ (read または write アクセス許可)OAuth アプリの比較
パブリック リポジトリへのアクセスパブリックリポジトリはインストール中に選択する必要があります。public_repo スコープ。
リポジトリ コード/コンテンツへのアクセスリポジトリコンテンツrepo スコープ。
イシュー、ラベル、マイルストーンへのアクセス発行repo スコープ。
pull request、ラベル、マイルストーンへのアクセスPull Requestrepo スコープ。
(CI ビルドの) コミットの状態へのアクセスコミットのステータスrepo:status スコープ。
デプロイおよびデプロイの状態へのアクセスデプロイメントrepo_deployment スコープ。
Webhook 経由によるイベントの受信GitHub App には、デフォルトで webhook が含まれています。write:repo_hook または write:org_hook スコープ。

リポジトリの確認

GitHub アプリOAuth アプリの比較
GitHub アプリでは /installation/repositories を参照して、インストール時にアクセスできるリポジトリを確認できます。OAuth アプリでは、アクセス可能なリポジトリの /user/repos (ユーザー ビューの場合) または/orgs/:org/repos (組織ビューの場合) を参照できます。
GitHub App は、リポジトリがインストールから追加または削除されたときに webhook を受信します。OAuth App は、Organization 内で新しいリポジトリが作成されたときに通知用の Organization webhook を作成します。

Webhooks

GitHub アプリOAuth アプリの比較
デフォルトでは、GitHub App には webhook が 1 つあり、その webhook は、アクセス権のあるすべてのリポジトリにおいて、受信するよう設定されたイベントを受信します。OAuth App は、イベントを受信する必要がある各リポジトリに対し、リポジトリ webhook を作成するため webhook スコープをリクエストします。
GitHub App は、Organization メンバーの権限で、特定の Organization レベルのイベントを受信します。OAuth App は、Organization レベルのイベントを受信する必要がある各 Organization に対し、Organization webhook を作成するため Organization webhook スコープをリクエストします。
Webhook は、GitHub アプリがアンインストールされると自動的に無効になります。OAuth アプリのアクセス トークンが削除される場合、Webhook は自動的に無効にならず、それらを自動的にクリーンアップする方法はありません。 手動で行うようにユーザーに依頼する必要があります。

Git アクセス

GitHub アプリOAuth アプリの比較
GitHub アプリはリポジトリの内容へのアクセス許可を要求し、インストール トークンを使用して、HTTP ベースの Git 経由で認証を行います。OAuth アプリは write:public_key スコープを要求し、API 経由でデプロイ キーを作成します。 その後、そのキーを使用して Git コマンドを実行できます。
トークンは、HTTP パスワードとして使用されます。トークンは、HTTP ユーザ名として使用されます。

マシンアカウントとボットアカウントの比較

マシン ユーザー アカウントは、GitHub のユーザー システムを使用して自動システムを分離する OAuth ベースの個人用アカウントです。

ボットアカウントは GitHub App 固有のもので、すべての GitHub App に組み込まれています。

GitHub アプリOAuth アプリの比較
GitHub App ボットは GitHub Enterprise シートを消費しません。マシンユーザアカウントは GitHub Enterprise シートを消費します。
GitHub App ボットにはパスワードが付与されないため、顧客は GitHub App に直接サインインできません。マシンユーザアカウントには、ユーザ名およびパスワードが付与されます。顧客はそれらを管理および保護します。