🐥

Githubの組織のリポジトリにトークンでアクセスする方法

に公開

GitHubのOrganizationがオーナーになっているリポジトリへのアクセスは,自分のアカウントで所有するリポジトリよりもセキュリティが厳格である.
本記事では,以前に遭遇した403エラーとその解決策について記録する.

HTTPSでの通常のアクセス(個人リポジトリ)

自分がオーナーとなっているプライベートリポジトリには,以下のようにHTTPS経由でアクセスできる.

git clone https://github.com/[ユーザー名]/[リポジトリ名].git

Username for 'https://github.com': [ユーザー名]
Password for 'https://[ユーザー名]@github.com': [Personal access token]

Passwordと表示されるが,入力すべきなのはPersonal Access Token(PAT)である.
トークンは,GitHubの Developer settings > Personal access tokens > Fine-grained tokens から発行できる.

トークンを作成する際には,以下のようにリポジトリの選択とアクセス権限を設定する.

  • Repository access
    • Only select repositories(必要なリポジトリを明示的に選択)
  • Repository permissions
    • Contents(Read and write)
    • Workflows(Read and write)(必要に応じて)

作成したトークンをキーチェーンや git credential.helper に保存すれば,以降は認証を省略できる.

問題:Organizationリポジトリへの403エラー

fine-grained tokenを使って,自分がオーナーではないOrganizationのプライベートリポジトリにアクセスしようとすると,403(Forbidden)エラーが発生することがある.

解決策:Classic tokenの利用

組織のリポジトリに確実にアクセスするには,fine-grained tokenではなくclassic tokenを利用する方法が簡便である.

トークンのスコープ設定例(classic token)

  • repo
  • workflow
  • admin:org(必要に応じて)

HTTPSでの明示的なトークン指定

git clone https://[YOUR-USERNAME]:[YOUR-TOKEN]@github.com/<organization>/<repo>.git

clone後,以下のコマンドでリモートURLを確認できる.

git remote -v

トークンがURLに含まれた状態で保存されるため,セキュリティ上の理由から共有端末での利用やログ管理には注意が必要である.

トークン更新時の対応

トークンが期限切れとなった場合などには,以下のようにリモートURLを更新すればよい.

git remote set-url origin https://[YOUR-USERNAME]:[YOUR-TOKEN]@github.com/<organization>/<repo>.git

Discussion