本文へスキップ
hdknr blog

RFC 7523 / JWT Bearer Grant

署名付き JWT(アサーション)を提示してトークンを発行してもらう OAuth のアサーション認可。モバイルの『1回ログイン → サービスごとのトークン』を支える

概要

RFC 7523(JWT Profile for OAuth 2.0 / JWT Bearer Grant)は、署名付き JWT を「アサーション」として提示し、受け取った側にアクセストークンを発行してもらう OAuth のアサーション認可。grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer を使う。モバイルアプリのように「ログインは1回だけ、トークンはサービスごとに分けたい」という要件を、IdP・RP の連携で実現する基盤になる。

詳細

登場人物と構図

ユーザーは IdP に1回ログインして JWT を1枚受け取り、その同じ JWT を各 RP に提示して、サービスごとのトークンを発行してもらう。

関連 RFC の役割分担

「2段の 7523」と aud

ユーザー確認を別プロトコルではなく 7523 で表現する設計では、JWT Bearer Grant を client→RPRP→IdP の2段で使う。aud(audience)の扱いが要点:

なぜランダム文字列でなく署名付き JWT か

JWT は署名により発行元(IdP)を公開鍵(JWKS)で検証できる。不透明なランダム文字列は発行元への問い合わせなしには出所も完全性も検証できない。中継経路に信頼できない public client が挟まっても、改ざんは署名検証で検知できる。

標準化のための現実解

独自の grant_type 名(例: urn:ietf:params:oauth:grant-type:assertion-grant)を使うシステムは、既存の認可サーバーにカスタムグラントを足して標準名 jwt-bearer へ寄せる最小移行が現実的。Django なら django-allauth(認証)+ django-oauth-toolkit(AS)を活かしたまま拡張でき、Authlib への全面差し替えは RFC 8693 級の要件が出てから検討すれば足りる。

関連ページ

ソース記事