GitHubの認証方法の新しいビッグウェーブに乗り遅れるな！

GitHubから何やら物騒なメールが来ました。

#パスワード認証を使っていた僕に来たメール [GitHub] Deprecation Notice

>You recently used a password to access the repository at {自分のリポジトリ名} with git using git/2.24.3 (Apple Git-128).

>Basic authentication using a password to Git is deprecated and will soon no longer work. Visit https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information around suggested workarounds and removal dates.


# 何が問題なのか
[メールに記載のGitHubのブログ記事](https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/)によると以下のようにあります。

>In July, we announced our intent to require the use of token-based authentication (for example, a personal access, OAuth, or GitHub App installation token) for all authenticated Git operations. Beginning August 13, 2021, we will no longer accept account passwords when authenticating Git operations on GitHub.com.

**すなわち、以前のパスワードでの認証からPersonal Access Tokenや二段階認証などの代替手段に切り替えないとgitでの操作でGitHubを利用することができなくなります。**

影響を受ける範囲と受けない範囲は以下です。詳細は上のリンクより確認してください。
>Command line Git access
>Desktop applications using Git (GitHub Desktop is unaffected)
>Any apps/services that access Git repositories on GitHub.com directly using your password
>The following customers remain unaffected by this change:

>If you have two-factor authentication enabled for your account, you are already required to use token- or SSH-based authentication.
>If you use GitHub Enterprise Server, we have not announced any changes to our on-premises offering.
>If you maintain a GitHub App, GitHub Apps do not support password authentication.

**このくらいの英語は翻訳する必要がないかもしれませんが、英語が読めない方に翻訳しておきます。**
## 影響を受ける場合
・コマンドラインからのGitからのGitHubへのアクセス
・Gitのデスクトップアプリ
　（ForkなどのGUIのクライアントアプリなどが対象で、GitHub Desktopは影響を受けない）
・GitHub.comからパスワードにより直接gitリポジトリにアクセスするあらゆるアプリやサービス
## 影響を受けない場合
・アカウントに二段階認証を有効にしている場合は、既にトークン経由やSSH経由での認証を要求されているため必要ありません。
・GitHub Enterprise Serverでのオンプレの環境には今のところ変更を加えるかどうかのアナウンスはしていません。
・GitHub Appについては、GitHub Appsはパスワード認証をサポートしていないので、関係ありません。

さて、ここで自分が該当しないとわかったエンジニアの方はここで記事を読むのをやめて
筋トレにでも励んでください。不幸にも該当してしまった人は、面倒ですが、以下で私が行ったことを行うのをお勧めします。

# 対処法　パスワード認証でまだ接続していたあなたへ

## トークンの生成
まずはこの素晴らしい公式ドキュメントに従ってPersonal Access Tokenを発行してください。
[個人アクセストークンを使用する GitHub Docs](https://docs.github.com/ja/enterprise-server@2.21/github/authenticating-to-github/creating-a-personal-access-token)

## トークンのローカルでの設定
トークンを作成した後は、どうやって使うのでしょうか？次のように説明があります。

>HTTPS経由でGitの操作をする際にパスワードの代わりにそのトークンを入力できます。

じゃあ、こうすればいいんでしょ？

```
git config --global --add user.password ここにトークンをブチ込む
```

と思ったあなた、それで正しいものの、それだけでは不十分です。
上のコマンドを叩いた後にgitからGitHubの操作をして見てからGitHubのトークンのページを見ても
トークンはNever Usedとなります。
![スクリーンショット 2020-12-26 21.48.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/23ad332c-c2a6-14f8-6196-1e8cc07a1aa6.png)

**これは、以前の認証情報がMacのosxkeychainに保存されているため、以前のパスワードで認証してしまってるからです。よって、これを更新する必要があります。**

## 古い認証情報がMacのosxkeychainに残っている問題への対処

以下の素晴らしい公式ドキュメントを参考にosxkeychainの再設定を行ってください。

[Updating credentials from the macOS Keychain](https://docs.github.com/ja/free-pro-team@latest/github/using-git/updating-credentials-from-the-macos-keychain)

英語が読みたくない？そんなあなたに要点だけ以下にまとめておきます。

### コマンドとスペースを押してSpotlight検索を開き,keychainを開く
![スクリーンショット 2020-12-26 22.24.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/82870220-cf1d-d400-19c2-b855d1fa8b72.png)

### 右上の検索窓に「github」と入力しGitHubの認証情報を探す
 ![スクリーンショット 2020-12-26 22.26.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/47d93a97-9d28-4b1f-1179-259e2e5aba83.png)

github.comを選択し、画面の指示に従い、先ほどゲットしたトークンをパスワードの欄にぶち込んでください。

**なお、他のgitクライアントへの認証情報もここから同様に変更できますのでついでに変更するのをお勧めします。**

## トークンが無事利用できているか確認
以上が終われば、git cloneなどで自分のプライベートリポジトリなどにアクセスを試行して見てください。
その後、GitHubの以下の設定画面にてトークンの利用状況を確認しましょう。

>Settings→Developer settings→Personal Access Tokens

![スクリーンショット 2020-12-26 22.31.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/614389/366e086e-bbd2-1eca-74d1-0385ac6d39c4.png)

お、先ほど異なり、Never Usedの部分がLast used within the last weekになっており、無事トークン経由でのアクセスが成功していることが確認できると思います。

## 追記：代替方法としてはSSH認証でもOKです
僕の場合はPersonal Access Tokenを使いましたが、SSH認証も代替案の一つです。

多少面倒ですが、2021年の夏頃にはパスワード認証は一部の環境をのぞき基本的に使えなくなるので
**GitHubの認証方法の新しいビッグウェーブに乗り遅れないようにしましょう。**

# 感想：困ったときは公式ドキュメントを読もう
困ったときは公式ドキュメントを探そう。
日本語がなくとも英語のドキュメントを参照しよう。
新しい出来事に関しては、公式のアナウンスが一番信頼性が高いです。
日本語での記事がなかったのでqiitaにこの記事を書いてますが、自分で公式ドキュメント探してやるのが一番理想です。

ここまで読んでいただき非常に感謝です。それでは良いエンジニアライフを！

# 参考文献のまとめ
・[Token authentication requirements for Git operations - The GitHub Blog](https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/)
・[個人アクセストークンを使用する - GitHub Docs](https://docs.github.com/ja/enterprise-server@2.21/github/authenticating-to-github/creating-a-personal-access-token)
・[Updating credentials from the macOS Keychain - GitHub Docs](https://docs.github.com/ja/free-pro-team@latest/github/using-git/updating-credentials-from-the-macos-keychain)