【GitHub】認証手段 Personal access tokens(HTTPS)方式

Git

初めに

私は GitLab愛好家です。

1.1 執筆の経緯を少し、、(溺愛している VSCodeでハマってしまったので)

久しぶりに GitHubを利用しなければならない開発に携わりまして。
エンジニアであれば個人用のアカウント社用アカウントを使い分けていると思います。

そこで今回、VSCode上のターミナルで 新規でサインインする GitHubアカウントにアクセス$ git clone)しようとしたら弾かれてしまい、それらを解決するまでの道のりを備忘録として記録しようと思います。

また、タイトルにもある「Personal access tokens(PAT)」方式(HTTPS + トークン認証)の設定方法についても触れますので、それらの情報のみで良い場合は「」までスキップしてください。

GitHubは、2021年08月から HTTPSのパスワード認証を全面廃止しており、Basic認証を試みても必ず失敗します。
そのため、認証なしでは $ git cloneを実行することができないので、以下に示す 3通りの方法で対応する必要があります。

  1. SSH方式(最もシンプルで拡張機能にも依存しない)
    • 皆まで言わなくても、よく使用されている認証方式です。
      • 私は、これ嫌いなんですよ。嫌いというか面倒くさいというか。(鍵管理が増えるので)
  2. Personal Access Token(PAT)方式
    • 本記事で触れる認証手段です。
      • 以下で詳細に説明します。
  3. VSCode上での GitHubアカウントへサインイン
    • 私は今回、これで躓きました。
      • ローカルにアクセストークン(PATとは別)をキャッシュ(OAuthトークン)

問題点

本件、私個人の環境依存的な要素が多いです。
そのため、経緯は発生した事象を文章ベースでツラツラ書きます。

2.1 経緯

最近、新しいPCを購入し、サブPCとして使用していました。
冒頭で述べた開発環境を(VSCode上のターミナルから)GitHubへアップロードする際に、サインインを求められました。
何の疑いもなくサインインを済ませてリポジトリをクローンし、アッド、コミット、プッシュまで順調に完了しました。

ここからが問題の始まりです。

まぁ、後付けにはなりますが、そもそも VSCode上で GitHubのサインインを求められた際に、少し嫌な予感がしたんです。
VSCodeとの関連性を示すような記載があったので。
※ 私自身、何かに依存している環境って嫌なんですよ。かなり。とても。めっちゃ。すごく。

次に、メインPCで作業をしていたので、上述に記載したような、嫌な予感(違和感)がしたこともあり、同様の作業をメインPCからでも問題なく実行できるかを試したところ、できませんでした。

2.2 事象

サブPCでは実行することができた、$ git cloneが正常に通りません。

実行直後には VSCodeの上部に Usernameと Passwordを求められ、正しく入力しました。
※ 出力されているログの内容は「パスワード認証は廃止された」という内容で、もちろん理解しているのですが、サブPCでは問題なく実行できたんですけど!?という個人的な感情に任せてキレ散らかしました。

# メインPC環境(VSCode上のターミナル)から実行

$ git clone https://github.com/xxxxx/p001.git 

Cloning into 'p001'...
remote: Support for password authentication was removed on August 13, 2021.
remote: Please see https://docs.github.com/get-started/getting-started-with-git/about-remote-repositories#cloning-with-https-urls for information on currently recommended modes of authentication.
fatal: Authentication failed for 'https://github.com/xxxxx/p001.git/'

2.3 問題

メインPCでは、過去に個人で運用している GitHubアカウントを VSCode上に紐付けていたんです。
※ 別にこれは悪くなかった。

そのため、$ git clone実行後に GitHubへのサインインを促すポップアップ(もしくはブラウザへの遷移)もなく、Usernameと Passwordを求められ素直に入力したら、前述のログが出力されて実行できませんでした。(パスワード認証は廃止されているので)

この度の問題点をまとめると、以下 3つ(特に 3つ目)が相まって起きた現象です。

  1. メインPCでは、VSCode上で個人用の GitHubアカウントへサインインをしていること
  2. パスワード認証が廃止されていること
  3. 私が、サブPCでは前述に記載した手順で実行できたのに、メインPCでは同様の手順でできないんだ!ってなったこと

解決

3.1. VSCodeのビルトイン

今回の直接的な原因は、以下に示す環境的な問題でした。

  1. サブPC
    • VSCode上から GitHub(社用)アカウントへサインインしていたこと
      • VSCode上で認証情報をキャッシュしていたので、PAT認証も不要$ git cloneすることができた。
  2. メインPC
    • VSCode上から GitHub(個人用)アカウントへサインインしていたこと
      • 個人用アカウントと紐付いているので、社用アカウントの認証情報がキャッシュされているはずもなく、GitHub正規の認証(SSHや PAT)を求められていた。

VSCodeには、「GitHub 認証」というビルトインがデフォルトで入っています。
実は、Marketplace(拡張機能)で自前にインストールしなくても、VSCode本体に「GitHub Authentication」拡張が同梱されているからです。

確認方法は、VSCode上から Ctrl + Shift + Pを押下して「拡張機能: ビルトイン拡張機能の表示」を選択、サイドバーに「GitHub 認証」が表示されている。

以上が、今回の根本的な原因でした。

そのため、別に、VSCode上で、どの GitHubアカウントにサインインしていても良いんです。
もちろん、その時は正規の手順で認証しないとけないので SSH認証もしくは PAT認証の手順を踏まないといけないですが、本来のあるべき手段ですからね。

何度も言いますが、この度の問題は、
私の個人的な興味というか「サブPC」ではできたのに、同様の手順で、なぜ「メインPC」でできないのか?
という理由を知りたかったから、自らハマりに行った問題という訳です。(言い訳)

Personal access tokens認証で使用するトークン発行手順

4.1. GitHubから発行

GitHubへサインインしていただき、以下の順番に倣って頑張って進めてください。
GitHubSettingsDeveloper settingsPersonal access tokensFine-grained tokens
進んだら、画面中央部の「Generate new token」を押下してください。

必要情報の入力
ここまで来たら、大体で分かると思いますので、各項目における詳細は割愛します。

ここ大事!
Permissions設定です。
Repository permissionsタブを押下して開き、数ある中から「Contents」を探してください。
次に、デフォルトの設定では「No access」となっていますが「Read and Write」に変更してください。
※ 本設定をしておかないと、リモートリポジトリ(ブランチ)に対して Git操作ができません。

Contentsパーミッション種別
  • No access
    • 何もできません。(何であるのかまで思ってる)
  • Read-only
    • $ git cloneおよび $git pullまで
  • Read and Write
    • Read-onlyに加えて $ git pushまで

はい、ここまで完了したら、画面下部の「Generate token」を押下してください。

更にくどくポップアップが出てくるので「Generate token」を押下してください。

すると、最初に居た画面まで戻りますので、発行されたトークンを必ずコピーしておいてください。
※ 2度と表示されませんので。(リロードしたり他画面へ遷移して戻ると消えてます)
消えても、再発行できるので問題はないのですが。

以上です。

Git操作

5.1. お好きなターミナル(コンソール)からどうぞ

先ほど発行した PAT認証(トークン)の使用方法としては、VSCodeでも、お好きなターミナルで $ git cloneを実行していただき、パスワード入力の際に、この トークンを使用(貼り付け)てください。

パスワード認証廃止による、パスワード代わりPAT認証になったということです。

最後に

GitLabは、そんな面倒くさいことしなくても良いんですけどね。
でもまぁ、セキュリティ面を考えると、ここまでしてくれてると安心ですけどね。

いかがでしょうか。
参考になりましたでしょうか。

最終的な所感としては、やはり、何かが何かに依存している環境って良くないと思うんです。
まぁ、それらを適切に管理して運用している方であれば非常に便利な機能だとは思いますが。

しかし、この業種って色んなことを色んなところで対応するから、過去に対応していたことを忘れていたり、それらの設定に引っ張られて意図しない挙動となっていることって結構あると思うんですよ。

今回みたいに!

まぁまぁ、大人しく GitHubの正規手順で実行していれば何の問題もなかったのですが、気になりますよね?
しかし、まぁ、解決できてよかったなと思います。

comment 📝

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