コピペコードで快適生活

明日使えるソースを自分のために

JWTについて

JWS/JWE/JWT/IDトークンってなに?

https://qiita.com/TakahikoKawasaki/items/1c1bcf24b46ebd2030f5 https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/amazon-cognito-user-pools-using-the-id-token.html

  • 直列化方式として2つある
    • JWS (JSON Web Signature)
    • JWE (JSON Web Encryption)
  • それぞれ JSON 形式とコンパクト形式がある。
  • JWT (JSON Web Token) は JWS か JWE を使用する
    • いずれにしてもコンパクト形式を使用する。
  • IDトークンとは?
    • name、email、および phone_number など、認証されたユーザーのアイデンティティに関するクレームが含まれるJWT
    • ID トークンは JWS もしくは「JWS を含む JWE」という形式をとる。
    • ID トークンには署名が必要

JWS署名について

https://www.engineer-memo.net/20180716-4614

  • 広義のjwtは署名付きのjson全体のこと
  • 狭義のjwtはpayloadのこと
    • JWTでは、Claim (Keyと値=パラメーターの事)として、基本的な Key の値が予約されている。
    • 例えば、"iss"は、"Issuer Claim(発行者)"、"exp"は、"Expiration Time Claim(有効期限)" として予約されている。
    • 独自の値を追加する事もできる。
  • 「JWS署名」とは
    • 「JOSE ヘッダー」と、「JWSペイロード」を「・」でつないだ値を入力にして、 HMAC SHA-256 で署名を作り、BASE64URL に変換したもの。
  • JWS Compact Serialization
    • 「JOSE ヘッダー」「JWSペイロード」「JWS署名」を「.」でつなぐ
  • HMAC(共通鍵暗号方式)
    • RSAではなくこっち使うのが一般的らしい。

HMACについて

https://www.infraexpert.com/study/ipsec4.html - 秘密鍵は文字列の並びであればなんでもよさそう。

RS256,HS256とは

https://www.web-dev-qa-db-ja.com/ja/jwt/rs256%E3%81%A8hs256%E3%81%AE%E9%81%95%E3%81%84%EF%BC%9A%E9%81%95%E3%81%84%E3%81%AF%E4%BD%95%E3%81%A7%E3%81%99%E3%81%8B%EF%BC%9F/826436771/

  • RS256: SHA-256を持つRSA署名 (公開鍵)
  • HS256: HMAC with SHA256 (共通鍵)

jwa: JSON Web Algorithm 暗号化アルゴリズム

https://kiririmode.hatenablog.jp/entry/20170225/1488020088