認証方式(Basic認証/Digest認証/Bearer認証)についてまとめてみた
はじめに
業務の中で、Web API(RET API)を扱うことがあり、なんとなく使っていた認証方式について改めて認識しておこうと思い、代表的な3つの認証方式について備忘録としてまとめてみました。
Basic認証
Basic認証は、最もシンプルな認証方式の一つ。ユーザー名とパスワードをBase64でエンコードし、HTTPリクエストのヘッダーに付加して送信して認証します。
base64: データを他の形式へ変換するエンコード方式の一つ。詳しくはこちらを参照。
Basic認証の仕組み
画像参照:https://gigazine.net/news/20201227-web-authentication-methods-compared/
- クライアントがサーバーにリクエストを送信します。
- サーバーが
401 Unauthorized
と返し、認証が必要だと伝えます。 - クライアントがヘッダーに
Authorization: Basic <Base64エンコードされた認証情報
を付けて再送信します。 - サーバーが認証情報を確認し、成功すればアクセスを許可します(
return 200 OK
で返答)。
メリット
- 実装が簡単。
- 多くのシステムでサポートされている。
デメリット
- セキュリティが低い:パスワードが平文に近い状態でネットワークを流れるため、盗聴されるリスクが高い。
- 毎回ユーザー名とパスワードを送信するためリスクが高い。
Digest認証
Digest認証は、Basic認証のセキュリティ上の問題を改善するために考案された認証方式です。パスワードを直接送信する代わりに、サーバーが生成したランダムな文字列と組み合わせてハッシュ化し、送信します。
Digest認証の仕組み
画像参照:https://gigazine.net/news/20201227-web-authentication-methods-compared/
-
クライアントがサーバーにリクエストを送信します。
-
サーバーが
401 Unauthorized
と返すのと共にチャレンジ文字列(nonce)を送ります -
クライアントがユーザー名、パスワード、チャレンジ文字列を使ってハッシュ値を計算し、それを送信します。
-
サーバーが受け取ったハッシュ値と内部で計算した値を比較して認証を行います。
チャレンジ文字列: サーバーがクライアントに送信する一時的なデータのこと。
nonce: サーバーが生成した一時的な文字列。
メリット
- Basic認証よりもセキュリティが高い:パスワードが直接送信されないため、盗聴されてもパスワードを解析されるリスクが低い。
デメリット
- 実装が少し複雑:Basic認証に比べて実装が複雑になる。
- 互換性の問題:一部のクライアントやサーバーではサポートされていないことがある。
Bearer認証
Bearer認証は、アクセストークンと呼ばれる一意なトークンを使って認証を行う方式です。ユーザーが最初に認証に成功すると、サーバーからアクセストークンが発行されます。以降のリクエストでは、このアクセストークンをHTTPリクエストのヘッダーに付加して送信します。
Bearer認証の仕組み
画像参照:https://gigazine.net/news/20201227-web-authentication-methods-compared/
- クライアントからサーバーに認証情報を送信します。
- サーバーはクライアントからの認証情報が正しければアクセストークンを発行し、クライアントへ送信します。
- ヘッダーに
Authorization: Bearer <トークン>
を付けて、クライアントはサーバーにリクエストを送ります。 - サーバーがトークンを検証し、アクセスを許可します。
メリット
- セキュリティが高い:アクセストークンを使うため、パスワードが盗まれるリスクが減少。
- セッション管理が容易:トークンに有効期限や権限を設定できる。
- O標準的な認証方式との連携:OAuthなどの標準的な認証方式との連携が容易。
デメリット
- トークンの盗難リスク:Bearerトークンが盗まれると、不正アクセスされる可能性がある。
- 有効期限の管理:トークンの失効や再発行の仕組みが必要。
まとめ
3つの認証方式をまとめるとこんな感じでしょうか。
認証方式 | メリット | デメリット |
---|---|---|
Basic認証 | 実装が簡単、多くのシステムでサポートされている | セキュリティが低い、セッション管理が難しい |
Digest認証 | Basic認証よりもセキュリティが高い | 実装が少し複雑、互換性の問題がある |
Bearer認証 | セキュリティが高い、セッション管理が容易、OAuthなどの標準的な認証方式との連携 | トークンの管理が重要 |
さいごに
今回は代表的な3つの認証方式についてまとめました。Bearer認証に関わってくるトークンやOAuthについても今後まとめたいと思います(認証認可苦手...)。