GitHubのOAuthアプリのスコープ解説:必要な権限を正確に指定しよう

セキュリティ

GitHubのOAuthアプリを開発する際、適切なスコープを設定することが重要です。スコープによって、アプリがアクセスできる範囲が制限されるため、必要最小限の権限のみを要求することが推奨されています。本記事では、GitHubのOAuthアプリで利用可能なスコープについて詳しく解説します。


GitPythonチュートリアル
GitPythonは、Gitリポジトリへのオブジェクトモデルアクセスを提供するライブラリです。このチュートリアルでは、実際の使用例を通してGitPythonの主要な機能を説明します。 Repoクラスを理解するまず初めに、git.Repoオブ...

スコープとは?

スコープは、OAuthアプリがアクセスできるリソースや操作の範囲を定義するものです。適切なスコープを設定することで、アプリが必要とする機能のみにアクセスを制限し、ユーザーのセキュリティとプライバシーを保護することができます。

利用可能なスコープ

GitHubのOAuthアプリでは、以下のスコープが利用可能です。

  1. (no scope):公開情報(ユーザープロフィール、リポジトリ情報、Gistなど)への読み取り専用アクセスを許可します。

  2. repo:公開・非公開リポジトリへの完全なアクセスを許可します。これには、コード、コミットステータス、リポジトリ招待、コラボレーター、デプロイメントステータス、リポジトリWebhookの読み書きアクセスが含まれます。また、組織が所有するプロジェクト、招待、チームメンバーシップ、Webhookの管理や、ユーザーが所有するプロジェクトの管理も可能になります。

  3. repo:status:公開・非公開リポジトリのコミットステータスへの読み書きアクセスを許可します。このスコープは、コードへのアクセスを許可せずに、他のユーザーやサービスに非公開リポジトリのコミットステータスへのアクセスを付与する場合にのみ必要です。

  4. repo_deployment:公開・非公開リポジトリのデプロイメントステータスへのアクセスを許可します。このスコープは、コードへのアクセスを許可せずに、他のユーザーやサービスにデプロイメントステータスへのアクセスを付与する場合にのみ必要です。

  5. public_repo:公開リポジトリへのアクセスを制限します。これには、公開リポジトリと組織のコード、コミットステータス、リポジトリプロジェクト、コラボレーター、デプロイメントステータスへの読み書きアクセスが含まれます。また、公開リポジトリをスターするためにも必要です。

  6. repo:invite:リポジトリへのコラボレーション招待の受諾・拒否を許可します。このスコープは、コードへのアクセスを許可せずに、他のユーザーやサービスに招待へのアクセスを付与する場合にのみ必要です。

要求されたスコープと許可されたスコープ

OAuthアプリをGitHubで設定する際、要求されたスコープが認証フォームでユーザーに表示されます。ユーザーは、アプリが要求するスコープを確認し、許可するかどうかを決定します。アプリが要求したスコープの範囲内でのみ、ユーザーはアクセスを許可することができます。

正規化されたスコープ

GitHubのAPIでは、正規化されたスコープが使用されています。これは、複数のスコープを組み合わせて表現することで、より細かな権限設定を可能にするものです。例えば、read:useruser:emailを組み合わせることで、ユーザー情報の読み取りとメールアドレスへのアクセスを許可することができます。

まとめ

GitHubのOAuthアプリを開発する際は、適切なスコープを設定することが重要です。必要最小限の権限のみを要求することで、ユーザーのセキュリティとプライバシーを保護しつつ、アプリの機能を実現することができます。本記事で紹介した利用可能なスコープを参考に、適切なスコープを選択してください。

また、GitHubではOAuthアプリの代わりにGitHub Appの開発を推奨しています。GitHub Appは、より細かな権限設定が可能であり、アプリができることをより詳細に制御できます。GitHub AppとOAuthアプリの違いについては、別途確認することをおすすめします。

適切なスコープを設定し、ユーザーに信頼されるOAuthアプリを開発することで、GitHubのエコシステムに貢献しましょう。

参考サイト

OAuth アプリのスコープ - GitHub Docs
スコープによって、必要なアクセスの種類を正確に指定できます。 スコープによって OAuth トークンへのアクセスが 制限 されます。 ユーザがすでに持っている範囲を超えた権限を許可することはありません。

コメント

タイトルとURLをコピーしました