操作
設計 #26
未完了JWTトークンの保存先について整理する
開始日:
2023-08-28
期日:
進捗率:
0%
予定工数:
説明
JWTトークンとは¶
認証やアクセス制御についての情報をJSON形式で記述し、一定の手順で符号化した「トークン」(token)を生成することができる。
- ヘッダー
- トークンや署名の形式についての情報を格納する部分。
- ペイロード
- 伝達する情報の本体で、システムが必要とするデータを格納する部分。
- 署名
- 署名はトークンの作成者の本人証明に用いるデータで、ヘッダーとペイロードを符号化したものを連結し、本人の秘密鍵とともに署名アルゴリズムで計算することで生成される。
- ヘッダー
ログイン時に認可サーバーで発行されるJWTトークンは、以下の情報が含まれている。
- いわゆるペイロードの部分。セッションIDよりも個人情報に関わるデータが含まれているため、セキュリティ的に厳密に扱う必要がある。
resp.id_token
=> {"at_hash"=>"dLNdgBOV1k1XMSPebpR38g",
"sub"=>"fa5c592d-272b-4b00-8d4d-9aed59f976b1",
"email_verified"=>true,
"iss"=>"https://cognito-idp.ap-northeast-1.amazonaws.com/ap-northeast-1_xxxxxxxxx",
"cognito:username"=>,
"origin_jti"=>"c6e7f860-43fe-4a7a-89a1-7378d83a19dd",
"aud"=>"49a51b1535i4toruvvqjij1jg3",
"event_id"=>"a30e47e3-61d3-4aaf-9626-04ae5ca79615",
"token_use"=>"id",
"auth_time"=>1693176300,
"exp"=>1693179900,
"iat"=>1693176300,
"jti"=>"50530a03-af44-4d52-acf8-58a4cb9350c5",
"email"=> }
参考¶
Lunatic1998 さんが約1年前に更新
LocalStorageやCookieに保存するのは¶
JWT トークンをヘッダーとして API に転送できるように、どこかに保存する必要があります。
それをローカルストレージに保存したくなるかもしれません。
それはしないでください!これは XSS 攻撃を受けやすいです。
- クライアント上で Cookie を作成すると、XSS が発生しやすくなります。
- HttpOnly Cookie (クライアントではなくサーバーによって作成される) が役に立つと思うかもしれませんが、Cookie はCSRF 攻撃に対して脆弱です。
- 認証サーバーと API サーバーが異なるドメインでホストされている場合は解決策にならない可能性。
操作