やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

GitHubAPIを叩くときAccessTokenを使えばOTPは不要である

二要素認証(Two-Factor)を設定したアカウントでもAccessTokenだけでAPIを叩けた。 WebAPIを叩くときはどの認証を使えばいいか。

結論

APIを叩くときは二要素認証よりもAccessTokenを使ったほうがよい。

  • 認証手続きが楽である(自動化できる)
  • AccessTokenなら漏洩しても影響範囲をscopeで制限できる
    • すぐ削除や再発行して無効化できるなどリスク管理できる
  • パスワード漏洩しうるBasic認証や二要素認証は危険

なお、私の個人的で未熟な見解なので責任はもてない。

AccessTokenならOTP不要

前回のバッチを使って試した。

二要素認証がONのアカウントに対し、AccessToken認証でAPIを叩いてみた。 このとき、OTPは不要で成功した。

二要素認証=Basic認証+OTP

OTPが必要なときは、Basic認証をしようとしたときだけらしい。二要素認証=Basic認証+OTP、という認識でいいのだろうか。

OTPは面倒だし、APIを叩くときはAccessToken認証一択でいいかもしれない。

Basic認証でOTP無しだと失敗する

試しに、二要素認証をONにしたアカウントで、OTP無しのBasic認証APIを叩いてみた。すると、以下の応答が返ってきた。

{
  "message": "Must specify two-factor authentication OTP code.",
  "documentation_url": "https://developer.github.com/v3/auth#working-with-two-factor-authentication"
}

Basic認証にOTP与えると成功する

X-Github-OTP: 6桁のOTPのHTTPヘッダを付与すると成功する。

curl --cacert %CURL_PEM% -H "X-Github-OTP: %OTP%" -u "%Username%:%Password%" https://api.github.com/user/repos

所感

二要素認証はパスワードも必要。だからバッチファイルにパスワードが残ってしまう。 それなら、WebAPIを叩くときは二要素認証よりもAccessTokenのほうがセキュリティ的に安全か。 (本当はそもそもどちらも直に書きたくないのだが)

実際のセキュリティを考えるなら、利用ケースごとに認証方式を使い分けるべきなのだろう。 次回、そのあたりについて検討してみる。