Skip to main content

GitHub アプリと OAuth アプリの違い

一般に、 GitHub Apps は、きめ細かいアクセス許可を使用し、アプリがアクセスできるリポジトリをより細かく制御し、有効期間の短いトークンを使用するため、 OAuth apps することをお勧めします。

GitHub Apps と OAuth apps について

一般に、 GitHub Apps は OAuth appsよりも好ましい。 GitHub Apps は、きめ細かいアクセス許可を使用し、アプリがアクセスできるリポジトリをより細かく制御し、有効期間の短いトークンを使用できるようにします。 これらの特徴により、アプリの資格情報が漏洩した場合に発生する可能性のある損害を制限することで、アプリのセキュリティを強化できます。

OAuth appsと同様に、GitHub Appsは引き続き OAuth 2.0 を使用し、OAuth トークンの種類 (ユーザー アクセス トークンと呼ばれます) を生成し、ユーザーに代わってアクションを実行できます。 ただし、 GitHub Apps はユーザーとは独立して動作することもできます。 これは、ユーザー入力を必要としない自動化に役立ちます。 アプリを Organization にインストールしたユーザーが Organization からいなくなった場合でも、アプリは引き続き機能します。

GitHub Apps には、一元化された Webhook が組み込まれています。 GitHub Apps は、アプリがアクセスできるすべてのリポジトリと組織の Webhook イベントを受信できます。 逆に、 OAuth apps は、リポジトリと組織ごとに Webhook を個別に構成する必要があります。

インストール アクセス トークンを使用する GitHub Apps のレート制限は、リポジトリの数と組織のユーザー数に応じてスケーリングされます。 逆に、 OAuth apps はレート制限が低く、スケーリングされません。

OAuth appよりもGitHub Appが好ましい場合が 1 つあります。 アプリがエンタープライズ オブジェクト自体などのエンタープライズ レベルのリソースにアクセスする必要がある場合は、OAuth appにエンタープライズに対するアクセス許可をまだ付与できないため、GitHub Appを使用する必要があります。 GitHub Apps は、エンタープライズ所有の組織およびリポジトリ リソースに引き続きアクセスできます。

GitHub Apps の詳細については、「GitHub アプリの作成について」を参照してください。

既存の OAuth app を GitHub Appに移行する方法の詳細については、「 OAuth アプリを GitHub Apps に移行する」を参照してください。

GitHub Apps をインストールしてOAuth appsを承認できるユーザー

GitHubアプリは、所有している個人アカウントまたは組織にインストールできます。 リポジトリに管理者アクセス許可がある場合は、GitHub Apps を組織のアカウントにインストールできます。 GitHub アプリがリポジトリにインストールされていて、組織のアクセス許可が必要な場合は、組織の所有者がアプリケーションを承認する必要があります。

デフォルトでは、Organization内のGitHub Appsの設定を管理できるのはOrganizationのオーナーだけです。 組織が所有する GitHub Apps の開発者設定を追加ユーザーが変更できるようにするため、所有者は GitHub App マネージャーのアクセス許可を付与できます。 GitHub App マネージャーは、サード パーティのアプリケーションを管理できません。 Organization での GitHub App マネージャーの追加と削除の詳細については、「組織の役割」を参照してください。

これに対し、ユーザーは OAuth appsを承認します。これによって、アプリは認証されたユーザーとして機能できるようになります。 たとえば、認証されたユーザーのすべての通知を検索する OAuth app を承認できます。 OAuth appからいつでもアクセス許可を取り消すことができます。

組織の所有者は、外部のコラボレーターが未承認の OAuth apps と GitHub Appsへのアクセスを要求できるようにするかどうかを選択できます。 詳しくは、「OAuth アプリと GitHub アプリのアクセス要求とインストールの制限」をご覧ください。

警告

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

GitHub アプリOAuth apps
GitHub アプリを組織にインストールするには、組織の所有者であるか、リポジトリの管理者アクセス許可が必要です。 GitHub アプリがリポジトリにインストールされていて、組織のアクセス許可が必要な場合は、組織の所有者がアプリケーションを承認する必要があります。リソースへのアクセス権を持つ OAuth app を承認できます。
個人用リポジトリにGitHub アプリをインストールできます。リソースへのアクセス権を持つ OAuth app を承認できます。
GitHub アプリをアンインストールしてそのアクセス権を削除するには、組織の所有者、個人用リポジトリの所有者、またはリポジトリの管理者権限が必要です。OAuth アクセストークンを削除して、アクセス権限を削除することができます。
GitHubアプリのインストールを要求するには、組織の所有者であるか、リポジトリの管理者権限を持っている必要があります。組織のアプリケーション ポリシーがアクティブな場合、組織のメンバーは、組織に OAuth app のインストールを要求できます。 Organization のオーナーは、その要求を承認または拒否する必要があります。

アプリとOAuth appsアクセスをGitHubできる機能

アカウント所有者は、別のアカウントへのアクセスを許可することなく、1 つのアカウントで GitHub App を使用できます。 たとえば、サードパーティ製のビルドサービスを従業員の Organization にインストールしつつ、そのビルドサービスに個人アカウントにあるリポジトリへのアクセスを許可しないことができます。 GitHub アプリを設定したユーザーが組織を離れた場合、アプリはインストールされたままです。

_承認された_OAuth appは、ユーザーまたは組織の所有者がアクセスできるすべてのリソースにアクセスできます。

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

トークンベースの識別

メモ

GitHub Apps では、ユーザー ベースのトークンを使用することもできます。 詳しくは、「ユーザーに代わってGitHub アプリで認証する」をご覧ください。

GitHub アプリOAuth apps
GitHub アプリは、JSON Web トークン形式の帯域外の秘密キーを使用して、インストール アクセス トークンを要求できます。
OAuth appは、Web 要求を介したリダイレクト後に、要求トークンをアクセス トークンと交換できます。
インストール トークンは、@jenkins-bot など、アプリを GitHub Apps ボットとして識別します。アクセス トークンは、アプリをそのアプリにトークンを付与したユーザー (@octocat など) として識別します。
インストール アクセス トークンは、事前に定義された時間 (現在は 1 時間) が経過すると期限切れになります。OAuth トークンは、顧客によって取り消されるまで有効となります。
GitHub Apps 組織またはリポジトリにインストールされている場合、インストールの数に応じてスケーリングされるレート制限が適用されます。 詳しくは、「GitHub アプリのレート制限」をご覧ください。OAuth トークンでは、1 時間あたり要求 5,000 件というユーザーのレート制限が使用されます。
レート制限の引き上げは、GitHub アプリ レベル (すべてのインストールに影響を与える) と個々のインストール レベルの両方で付与できます。レート制限の引き上げは、 OAuth appごとに付与されます。 その OAuth app に付与されたすべてのトークンは、制限の引き上げを受けます。
GitHub Apps は、ユーザーの代わりに認証できます。 承認するフローは、 OAuth app 承認フローと同じです。 ユーザー アクセス トークンは期限切れになることがあり、更新トークンで更新できます。 詳細については、「ユーザー アクセス トークンを更新する」および「ユーザーに代わってGitHub アプリで認証する」を参照してください。
OAuth appsによって使用される OAuth フローは、ユーザーに代わってOAuth appを承認します。 これは、 GitHub App ユーザー アクセス トークンの生成に使用されるフローと同じです。

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

OAuth appsとは異なり、GitHub アプリには、必要なアクセスのみを要求できるアクセス許可が付与されています。 たとえば、継続的インテグレーション (CI) GitHub App では、リポジトリ コンテンツへの読み取りアクセスを要求したり、状態 API への書き込みアクセスを要求したりできます。 別のGitHub アプリは、コードへの読み取りまたは書き込みアクセス権を持つ必要はありませんが、問題、ラベル、マイルストーンを管理できます。 OAuth apps 詳細なアクセス許可を使用できません。

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

リポジトリの確認

GitHub アプリOAuth apps
GitHub Apps では、/installation/repositories を確認して、インストールでアクセスできるリポジトリを確認できます。
OAuth apps では、ユーザー ビューの /user/repos を確認したり、アクセス可能なリポジトリの組織ビューを /orgs/:org/repos したりできます。
GitHubアプリは、リポジトリがインストールに追加または削除されたときに Webhook を受け取ります。
OAuth apps 組織内で新しいリポジトリが作成されたときに通知する組織 Webhook を作成します。

Webhooks(ウェブフック)

GitHub アプリOAuth apps
既定では、GitHub Apps には、アクセス権を持つすべてのリポジトリに対して受信するように構成されているイベントを受信する単一の Webhook があります。
OAuth apps は、イベントの受信に必要な各リポジトリのリポジトリ Webhook を作成するように webhook スコープを要求します。
GitHub アプリは、組織のメンバーのアクセス許可を持つ特定の組織レベルのイベントを受け取ります。
OAuth apps 組織レベルのイベントを受信する必要がある組織ごとに、組織の Webhook スコープを作成するよう要求します。
GitHub アプリがアンインストールされると、Webhook は自動的に無効になります。
OAuth appのアクセス トークンが削除された場合、Webhook は自動的に無効になりません。また、自動的にクリーンアップする方法はありません。 手動で行うようにユーザーに依頼する必要があります。

Git にアクセス

GitHub アプリOAuth apps
GitHub Apps はリポジトリ コンテンツのアクセス許可を要求し、インストール アクセス トークンを使用して HTTP ベースの Git 経由で認証します。 詳細については、「GitHub アプリのインストール アクセス トークンの生成」を参照してください
OAuth apps
write:public_keyスコープを要求し、API を使用してデプロイ キーを作成します。 その後、そのキーを使用して Git コマンドを実行できます。
トークンは、HTTP パスワードとして使用されます。トークンは、HTTP ユーザ名として使用されます。

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

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

ボット アカウントは GitHub Apps に固有であり、すべてのGitHub アプリに組み込まれています。

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