愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grantsについて

長い!タイトル長い!昨日お酒を飲んでいる時に教えてもらったのでメモ。

http://tools.ietf.org/html/draft-ietf-oauth-jwt-bearer-06

端的に内容を書くと、その名の通り

  • OAuth2の各種フローにおけるclient認証にJWT Bearerを使えるように
  • OAuth2のauthorization grantとしてJWT Bearerを使えるように

という内容の二本立て。前者は例えばauthorization codeでのtoken endpointへのtoken request発射時にBasic認証の代わりに使うとかそんな話で、後者はgrant_type=urn:ietf:params:oauth:grant-type:jwt-bearerとしてtoken endpointにJWT投げつけてaccess tokenを得るという、つまるところgrant_typeの追加である。

draftにはこの両方が併記されていてちょっと分かりづらいのだが、これらの用途が本来別々のものであることは明らかである。


このdraftはAssertion Framework for OAuth 2.0 Client Authentication and Authorization Grantsというdraftに乗っかった上で書かれている。そちらのdraftに書かれているのは、

  • OAuth2の各種フローにおけるClient認証に新しい手段を追加するためのシンタックスの定義
  • OAuth2のauthorization grantに新しいgrant_typeを追加するためのシンタックスの定義

というメタプロトコル的 (?) な何かである。その性質上抽象的なことが書いてあるので、draft-ietf-oauth-jwt-bearer-06のような具体的な適用例から読んだ方がよい。Assertion Frameworkから先に読むとおそらく理解に無駄な時間がかかる。


このdraftの理屈上、client認証をJWT Bearerでやりつつauthorization grantにもJWT Bearerを用いる、ということも可能である。次のようなリクエストになるだろう。

     POST /token.oauth2 HTTP/1.1
     Host: authz.example.net
     Content-Type: application/x-www-form-urlencoded

     grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
     &assertion=eyJhbGciOiJFUzI1NiJ9.eyJpc3Mi[...omitted for brevity...].J9l-ZhwP[...omitted for brevity...]
     &client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer
     &client_assertion=eyJhbGciOiJSUzI1NiJ9.eyJpc3Mi[...omitted for brevity...].cC4hiUPo[...omitted for brevity...]

JWTまみれ!


See also: OAuth 2.0 JWT Bearer Token Flow