GitHubのOAuthアプリを開発する際、適切なスコープを設定することが重要です。スコープによって、アプリがアクセスできる範囲が制限されるため、必要最小限の権限のみを要求することが推奨されています。本記事では、GitHubのOAuthアプリで利用可能なスコープについて詳しく解説します。
スコープとは?
スコープは、OAuthアプリがアクセスできるリソースや操作の範囲を定義するものです。適切なスコープを設定することで、アプリが必要とする機能のみにアクセスを制限し、ユーザーのセキュリティとプライバシーを保護することができます。
利用可能なスコープ
GitHubのOAuthアプリでは、以下のスコープが利用可能です。
-
(no scope)
:公開情報(ユーザープロフィール、リポジトリ情報、Gistなど)への読み取り専用アクセスを許可します。 -
repo
:公開・非公開リポジトリへの完全なアクセスを許可します。これには、コード、コミットステータス、リポジトリ招待、コラボレーター、デプロイメントステータス、リポジトリWebhookの読み書きアクセスが含まれます。また、組織が所有するプロジェクト、招待、チームメンバーシップ、Webhookの管理や、ユーザーが所有するプロジェクトの管理も可能になります。 -
repo:status
:公開・非公開リポジトリのコミットステータスへの読み書きアクセスを許可します。このスコープは、コードへのアクセスを許可せずに、他のユーザーやサービスに非公開リポジトリのコミットステータスへのアクセスを付与する場合にのみ必要です。 -
repo_deployment
:公開・非公開リポジトリのデプロイメントステータスへのアクセスを許可します。このスコープは、コードへのアクセスを許可せずに、他のユーザーやサービスにデプロイメントステータスへのアクセスを付与する場合にのみ必要です。 -
public_repo
:公開リポジトリへのアクセスを制限します。これには、公開リポジトリと組織のコード、コミットステータス、リポジトリプロジェクト、コラボレーター、デプロイメントステータスへの読み書きアクセスが含まれます。また、公開リポジトリをスターするためにも必要です。 -
repo:invite
:リポジトリへのコラボレーション招待の受諾・拒否を許可します。このスコープは、コードへのアクセスを許可せずに、他のユーザーやサービスに招待へのアクセスを付与する場合にのみ必要です。
要求されたスコープと許可されたスコープ
OAuthアプリをGitHubで設定する際、要求されたスコープが認証フォームでユーザーに表示されます。ユーザーは、アプリが要求するスコープを確認し、許可するかどうかを決定します。アプリが要求したスコープの範囲内でのみ、ユーザーはアクセスを許可することができます。
正規化されたスコープ
GitHubのAPIでは、正規化されたスコープが使用されています。これは、複数のスコープを組み合わせて表現することで、より細かな権限設定を可能にするものです。例えば、read:user
とuser:email
を組み合わせることで、ユーザー情報の読み取りとメールアドレスへのアクセスを許可することができます。
まとめ
GitHubのOAuthアプリを開発する際は、適切なスコープを設定することが重要です。必要最小限の権限のみを要求することで、ユーザーのセキュリティとプライバシーを保護しつつ、アプリの機能を実現することができます。本記事で紹介した利用可能なスコープを参考に、適切なスコープを選択してください。
また、GitHubではOAuthアプリの代わりにGitHub Appの開発を推奨しています。GitHub Appは、より細かな権限設定が可能であり、アプリができることをより詳細に制御できます。GitHub AppとOAuthアプリの違いについては、別途確認することをおすすめします。
適切なスコープを設定し、ユーザーに信頼されるOAuthアプリを開発することで、GitHubのエコシステムに貢献しましょう。
コメント