Webサービスを使うときに必須の「認証」について調べてみた。
参考
http://www.kogures.com/hitoshi/webtext/sec-password-shurui/index.html
【プログラマ英語】それ認証って意味じゃないですよ(厳密には) - Qiita
背景
Webサービスを使うときの認証手続きが煩雑化してきた。たとえばGitHubでは以下の通り。
- Basic認証
- TwoFactor認証
- ワンタイムパスワード(OTP)
- TwoFactor認証
- OAuth
- SAML SSO(シングルサインオン)
- 許可したTokenのみ使える
認証と認可
和訳 | 英語 | 読み | 例 | 意味 |
---|---|---|---|---|
認証 | Authentication | オーセンティケーション | Basic認証 | いわゆるログイン。身元確認し入場する。全権限がある。 |
認可 | Authorization | アソリゼーション | OAuth | いわゆるOAuth。情報操作の許可をする。ログインの権限限定版。 |
セキュリティ向上のために
- 2FA有効化し、ふだんはTokenを使ってAPI発行により操作する
- 通信傍受などによりTokenが漏洩してもScopeにより操作権限が限定されているため被害を抑えられる
- Basic認証できればTokenはいつでも破棄できる
しかしBasic認証のパスワードが漏洩するとアカウントが乗っ取られる。よって2FAで強化しつつ、Tokenを使うのが最強。
実際はどうするか
- 2FAを有効にするとBasic認証時に毎回OTPが必要になる
OTPにも脆弱性がある。
2要素認証のTOTPとHOTP、どちらがより安全か? – yohgaki's blog
所感
手間とセキュリティのトレードオフ。2FA使うならパスワードの強度を高めてTokenを使うほうがバランス取れてるかもしれない。