二要素認証(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のほうがセキュリティ的に安全か。 (本当はそもそもどちらも直に書きたくないのだが)
実際のセキュリティを考えるなら、利用ケースごとに認証方式を使い分けるべきなのだろう。 次回、そのあたりについて検討してみる。