質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

Q&A

2回答

3066閲覧

Json Web Tokenについて。

kinpirans

総合スコア16

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Authentication

Authentication(認証)は正当性を認証する為の工程です。ログイン処理等で使われます。

2グッド

0クリップ

投稿2015/12/07 03:35

編集2015/12/07 06:59

今、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認証を行うフローの全体の事だと思っていたらしく、私との認識がズレている事がわかり、ますますわからなくなってしまいました。

フローの場合の例としては下記のような認識をもたれていました。

  1. HTTPリクエストにUser名とPassWordを入れて、バックエンドに投げる
  2. バックエンドでアカウント認証を行い、User名やToken期限などが入ったJWSを生成しフロントエンドに返す。
  3. フロントエンドは、以後そのJWS Tokenをヘッダーなどに入れリクエストを送る。
  4. バックエンドではJWS Tokenを毎回解読し、許可をする。

このフローの事をJWTと呼ぶ?

いったい、どの認識が正しいのでしょうか?

理解力が無く恐縮なのですが、どなたか御教授宜しくお願い致します。

naoyan, ikuwow👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

下記のURLがわかりやすくまとまっているかと思います。
Introduction to JSON Web Tokens
JSON Web Token (JWT) Signing Algorithms Overview

投稿2019/06/04 02:44

編集2019/06/04 02:49
Hisashi.Y

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

その後、調べた結果。
JWTとは主に予約済みクレームの事を指していて、その共通フォーマットにより、クレームの意味が世界標準で定まってる事に意味があり、
JWSとは上記のクレームセットを電子署名方式でやり取りする方法の事を言っている。
というのが一番正しい解釈だという考えに至りました。

簡単に言うとこんな感じ?

  • JWT:書き方
  • JWS & JWE:送り方

投稿2015/12/14 03:46

編集2015/12/14 03:48
kinpirans

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問