よくある質問ですが、あまり賢明ではありません。JWTはトークンの一種であり、OAuthはトークンの分配方法を記述するフレームワークです。
「フレームワーク」とはどういう意味ですか?トークンのリクエストに使用できる、およびリクエストのシーケンスとそれらのフォーマットのみを使用できます。OAuthv2は、異なるシナリオの個別の「フロー」または許可タイプを記述し、特定のフローのセキュリティを拡張するための異なる拡張(PKCEなど)を備えています。
OAuthV2付与によるトークン要求の結果は...トークンです。次に、そのものが「無記名トークン」として使用されます。つまり、トークンを保持しているすべての当事者が、サービスのapi要求を行うときにそれを提示できることを意味します(たとえば、「ストアドバリューカードの残高は?」)。無記名トークンとして、それは現金のように機能します。持っていれば使えます。(現金とは異なり、トークンは使い捨てではありません。おそらく、公共交通機関での終日乗車券か、ディズニーワールドでの終日切符の方がいいでしょう。)
JWTは特定のタイプのトークンであり、JWTはOAuth Bearerトークンとして完全に使用できます。実際、これは最も一般的な方法です。それを踏まえると、「JWT vs OAuth」は、リンゴとリンゴカートの比較です。
「OAuthトークン」は常に不透明トークン-固有の意味を含まない英数字のランダムなシーケンス-を意味し、OAuthトークンディスペンサリーによって付与され、同じOAuthディスペンサリーシステムによってのみ検証できるとしばしば考えられます。ただし、これが唯一のOAuthトークンではありません。不透明トークンは一種のトークンです。JWTは別の種類のOAuthトークンとして使用できます。
対照的に、JWTは不透明ではありません。JWTは「ポインタ」または情報への参照ではありません。実際には、トークンを持つ任意の当事者が抽出および解釈できる特定の情報がたくさん含まれています。JWTには実際の情報が含まれているため、JWTは大きくなる可能性があります。含まれるクレーム、および署名に使用されたアルゴリズムに応じて、300バイト、500バイト、またはそれ以上。人々が「JWTは自己検証している」と言うとき、JWTの所有者は誰でもそれを開いて検証し、提示されたクレームに基づいて承認を決定できます。JWTの検証とは、その構造を検証し、base64エンコードをデコードし、キーが正しいことを検証し、署名を検証し、必要なクレームがトークンに存在することを検証し、有効期限を確認することを意味します。簡単なことではありません むしろ多段階のプロセスですが、もちろんこれを活用するさまざまなプログラミング言語のライブラリがたくさんあります。もちろん、Apigee Edge APIプロキシ内でこれを行うのに役立つVerifyJWTポリシーがあります。重要なのは、任意の所有者または受信者がトークンを検証できることです。このため、JWTは「フェデレーション」をサポートしていると言います。誰でもトークンを生成でき、誰でもトークンを読み取って検証できます。
カスタムクレーム。JWTトークンと不透明OAuthトークンの両方が、サブジェクトに関するカスタムクレームを運ぶことができます。セキュリティ。どちらも無記名トークンです。どちらも秘密として保護する必要があります。有効期限。どちらも有効期限をマークできます。どちらもリフレッシュできます。認証メカニズムまたはエクスペリエンス。どちらも同じユーザーエクスペリエンスを提供できます。