プログラミングスクール

GitHubの2FA(2段階認証)がMac謹製の”パスワード”でできちゃう件

GitHubの2FA(2段階認証)が2023年より必須化されて、頭を悩ませていませんか?何? TOTPアプリって。とか色々新しい概念をまた学ばなければなりません。Google Authenticatorやら1PasswordやらMicrosoft Authenticatorやらをインストールしないといけないのかな?と悩んでいたところ、なんとMacなら何もインストールしなくても良いことがわかりました。

GithubはTOTPアプリを推奨

2段階認証は手段がいくつかあります。お馴染みのSMSでコードを送ってくるのもありますが、GithubとしてはTOTPアプリを推奨しています。SMSの携帯番号は国によっては割とハックしやすいためだと思われます。

とはいえ、SMS認証は他のサービスでは普通に使われていますし、日本なら個人的には全然問題無いのではないかな思います。

なので、TOTPアプリとSMS認証の併用もありだと思います。少なくともこれから説明するTOTPの認証に慣れるまではSMS認証と併用し、慣れたらSMS認証は外すというのもおすすめです。

ちなみにTOTPというのはTime-based One-Time Passwordの略で、サービスから取得したkeyを元にデバイスで一定時間ごとにコードを生成し、それを使ってサービスにログインする仕組みです。なぜこれが技術的に安全かの説明は他のメディアに譲り、Macでの使い方を説明していきます。

MacならTOTPアプリインストール不要

TOTPアプリでの認証をすると言っても実はMacでは何かアプリをインストールする必要はありません。OSに同等の機能が既に備わっています。世の中にある記事は大体冒頭で紹介した外部アプリをMacやスマホにわざわざインストールする内容しかなく、本当に不親切だなーと思いました。だって、Github使ってるようなエンジニアのかなりの割合がMacユーザーでしょ?

アプリとしてあるわけでは無いので、何と呼べばいいのかわからないのですが、環境設定から開ける「パスワード」から設定できます。これはプリインストールされている「キーチェーンアクセス」とも連動しています。

なので、WebブラウザとしてSafariを使っている方は、Touch IDでガンガン自動入力してくれて簡単にGitHubにログインできます。ちなみに、私はやっていないのですが、最近のMac OSならChromeでもMacのキーチェーンアクセスを使えるようにできるらしく、Chromeでも同じ感じで楽にログインできるようです。

Github側からsetup keyを取得する

執筆時は2FAの初期セットアップは済んでいたので、同じ流れではないと思うのですが、手順の本質は同じです。

「Settings」から「Password and Authentication」に行き、「Two-factor methods」の中から「Authenticator app」を見つけて、「Add」か「Edit」を押します。

「setup key」を押します。

すると、setup keyの文字列が表示されます。これをコピーしておきます。

ちなみに、setup keyでなくQRコードでも同じことができますが、文字列の方が扱いが圧倒的に楽なのでsetup keyを使います。おそらくスマホにTOTPアプリをインストールしたい人にとってはQRコードをカメラで読み込むのが楽なのでしょう。

Macで「パスワード」での設定

次にMacでの作業です。「システム設定」から「パスワード」を開くと、ログインパスワードかTouch IDを求められるので解除します。

SafariでGitHubにログインしたことがあってキーチェーンにIDとパスワードが保存されている場合は、以下のように検索するとGitHubの項目が表示されます。Macのキーチェーン自体を使ったことがない方は、ググればたくさん使い方が出ますので、まずそちらをご覧頂ければと思います。以下を押します。

出てきたプロンプトを少し下にスクロールすると、「確認コード」という項目があるので「設定」を押します。

ここに先ほどコピーしたsetup keyの文字列を入力し、「設定キーを使用」を押します。

するとすぐに確認コードが表示されます。30秒ごとに更新されています。これをコピーします。ただ、有効な秒数が短すぎる場合は更新されるのを待って、新しいコードをコピーしましょう。

GitHub側に確認コードを確認し設定を保存

先ほどMacの「パスワード」でコピーした確認コードを今度はGitHub側の先ほどの画面に戻って、「Verify the code from the app」という欄に貼り付けます。

すると欄の右側に緑のチェックマークが表示されるので、「Save」を押します。緑のチェックマークの確認と「Save」を押すのを両方忘れないようにしてください。これを忘れてログアウトするとログインできなくなる可能性があります。

Macのキーチェーンで楽々ログイン

これでもうTOTPの2FAの設定はできたので、ログアウトして簡単にログインできるのですが、ログアウトする前に念のためリカバリーコードはダウンロードしてあるか確認しておきましょうね。

リカバリーコードは何かのトラブルで2FAでログインできなくなってしまった場合、問答無用でログインできるためのコードです。

SMS認証を設定せず、TOTPだけで2FAを設定している場合は、Macが無いとログインできないということになります。なので、その場合は、リカバリーコードは当該Mac以外に保存しておくのが合理的な使い方です。

では、一度ログアウトしてログインしてみましょう。

IDとパスワードの認証をTouch IDで通過した後、次のような2段階認証の画面になります。ここでもちゃんとキーチェーンが自動で働き、Touch IDで通過できるようになっています。

ちなみに、Macのキーチェーンには以下の行が自動的に追加されます。

Password Manager Metadata: github.com

あれ、何かおかしい。。。

本記事を書くための確認作業をしている中で、2段階認証のログインに失敗し以下のようなエラーが表示されました。

Two-factor authentication failed.

これを連続で何回もやってしまうとロックアウトされてしまい、15分間ログインを試みることすら出来なくなるので注意。

There have been several failed attempts to sign in from this account or IP address.

Please wait a while and try again later.

リカバリーコードでログインして、もう一度setup keyの設定からやり直しました。

しかし、確認コードを検証するところでやはりエラーメッセージが発生してしまいます。

Two-factor code verification failed. Please try again.

色々試しているうちに原因がわかりました。

ネットで調べるとデバイス側のTimezoneがおかしいとかSyncされていないなどの意見がありましたが、私の場合はもっと単純な原因でした。

一度Macで確認コードを設定すると、確認コードを検証する画面にもTouch IDができるようになるのですが、二回目以降も面倒くさがり屋の自分はTouch IDで入力していました。それが原因でした。

なぜそれがダメかというと、Touch IDで入力すると自動的に次の画面に遷移しようとします。しかし、この画面はこの画面内で動的に検証する仕組みになっています。次の画面に無理やり行こうとしてしまい、真っ白な画面になってしまうのです。私はこれで設定が完了したのかな、と最初思っていたのですが、どうやら「Save」ボタンを押していないので反映されていないということです。でもMac側の「パスワード」には新しいsetup keyが設定されてしまっているので、これでログインしようとすると出来ないということです。

なので、この欄はTouch IDによる入力を使わずに、必ず手動で「パスワード」から確認コードをコピペしましょう。そして緑のチェックマークを確認し、すぐに「Save」を押しましょう。

この画面の確認コードを検証する欄は、あくまでも新しいsetup keyを検証するための欄です。既存の「パスワード」に設定されているsetup keyを検証するものではありません。

私は初めそれを理解しておらず、既存の設定されているsetup keyを検証するためにこの欄を使ったため上のエラーメッセージが表示されたということです。

この画面は新しいsetup keyのための画面なので、この画面のsetup keyはどんどん更新されます。Saveを押しても更新されますし、Cancelを押しても更新されます。

おかしくなったら一度「Authinticator App」自体を一度disableしてからやり直すというのもありです。

さいごに

Macの「パスワード」のこの機能、2021年のmacOS Montereyから導入されているのですが、あまり話題になっていませんね。参考記事をリンクしておきたかったのですが、触れている記事もApple公式にさえありませんでした。私もどうやって気づいたか忘れてしまいました。GitHub以外のTOTPで2段階認証するサービスにも使えてとにかく便利なので試してみてください。