今、Json Web Token、いわゆるJWTについて調べています。
その中でJWTとJWSの意味合いの違いが分からなくなったので質問させてください。
私の中で、JWTとはプレーンなJWT(下記)であり、
BASE64URL (UTF-8 (Header)) . BASE64URL (UTF-8 (Claim Set)) .
JWSとはJWTに署名を付けたToken(下記)である。
BASE64URL (UTF-8 (Header)) . BASE64URL (UTF-8 (Claim Set)) . Base64url (UTF-8 ( Signature))
という認識をもってました。
あくまで、JSONを使ったコンパクトでurl-safeなToken(文字列)であり、
このToken文字列の作り方である、Format(形式)がJWTやJWSと呼ばれる物という認識でした。
しかし、RFCなどを読み返した場合に、
JWTヘッダがJWSヘッダである場合, そのJWTクレーム・セットをJWSペイロードとしたJWSとして表現され, クレームにはデジタル署名もしくはMACが付与される. JWTヘッダがJWEヘッダである場合, そのJWTはJWTクレーム・セットをJWEの平文入力としたJWEとして表現され, クレームは暗号化される. JWTはJWEやJWS構造の中に含まれ入れ子のJWTを構成することができ, 単一のJWTに対して署名や暗号化を繰り返し実施することができる.
とある事や、
JWTヘッダのUTF-8表現のオクテットをbase64urlエンコードすると, このエンコード済JWSヘッダの値が作られ, それはエンコードされたJWTヘッダとして使われる.
とある事から、もしかして、JWTとは、base64urlエンコードするTokenの作成方法云々ではなく、単にTokenの期限などを記載する、クレームの事を言っているのでは?と思う様になりました。
しかし、JWSにもヘッダパラメータがあるので、そことの違いがよくわからなくなってしまいました。
しかも、jwtライブラリ一覧
にも有るライブラリの中で、どのクレームにも対応していないライブラリも有ったりします。
その場合、上記の「クレームの事を言っているのでは?」という認識では、どのクレームにも対応していないライブラリはjwtライブラリでは無いのでは?という事になってしまいます。
あと、もう一つ、他の人と話をした時に、その人はJWTの事をJWS認証を行うフローの全体の事だと思っていたらしく、私との認識がズレている事がわかり、ますますわからなくなってしまいました。
フローの場合の例としては下記のような認識をもたれていました。
- HTTPリクエストにUser名とPassWordを入れて、バックエンドに投げる
- バックエンドでアカウント認証を行い、User名やToken期限などが入ったJWSを生成しフロントエンドに返す。
- フロントエンドは、以後そのJWS Tokenをヘッダーなどに入れリクエストを送る。
- バックエンドではJWS Tokenを毎回解読し、許可をする。
このフローの事をJWTと呼ぶ?
いったい、どの認識が正しいのでしょうか?
理解力が無く恐縮なのですが、どなたか御教授宜しくお願い致します。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。