Bearer認証とJWT認証
Bearer認証
Bearer認証は一時的なトークンをヘッダーに設定し、サーバーサイドでそのトークンが有効かどうかを確認することで認証を行う。
トークンはユーザーIDと紐づけられており、サーバーはトークンを基にユーザー情報を都度取得する必要がある。
JWT認証
JWT認証は署名付きトークンを使用し、署名の検証が成功すれば認証OKとなる仕組み。
トークン自体に key: value
形式でデータを含められるため、ユーザー情報を含むことが可能。
Bearer認証とは異なり、トークンとユーザーIDをサーバーで管理する必要がなく、ユーザー情報取得や認証処理にかかるリソースを軽減できる。
JWTペイロードについて
JWTのペイロード部分はただのBase64エンコードされた文字列なのでXMLでもTSVでも好きな形式を指定しようと思えば可能ですが、標準ライブラリでパースできないのでヘッダ解析を自作する必要があります。
基本的にJSON(辞書型)運用を想定しているのでよっぽど事情が無い限りは key: value
形式で問題ないと思います
リクエストサンプル
Bearer認証のリクエスト
HTTPリクエスト例
GET /api/resource HTTP/1.1
Host: example.com
Authorization: Bearer 49368cec-87b5-40f1-9194-03a10d41c659
Content-Type: application/json
CURL例
curl -X GET https://example.com/api/resource \
-H "Authorization: Bearer 49368cec-87b5-40f1-9194-03a10d41c659" \
-H "Content-Type: application/json"
※認証情報はヘッダに設定されるため、GET以外のMETHODでも同様です
JWT認証のリクエスト
ペイロード
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}
HTTPリクエスト例
GET /api/resource HTTP/1.1
Host: example.com
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Content-Type: application/json
CURL例
curl -X GET https://example.com/api/resource \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c" \
-H "Content-Type: application/json"
※認証情報はヘッダに設定されるため、GET以外のMETHODでも同様です