OAuth 2.0 と JWT 関連 RFC

個人的な調査のために OAuth 2.0 と JWT 関連 RFC を発行日順に並べた。

RFC6749 — The OAuth 2.0 Authorization Framework

2012 年 10 月

OAuth 1.0a に代わる新たな認証基盤 OAuth 2.0 のコアを規定しており、特筆すべき点がいくつかある。

  • access_token の内容は規定されておらず、ベンダーに委ねられている
    • JWS でもなんでもいい
  • リソースサーバーに access_token を渡す方法は規定されていない(同月発行の RFC6750 で規定された)

Authorization Grant

トークンエンドポイントでaccess_tokenを発行してもらう際に使用できる Grant (許可証)は、提案中の拡張仕様を含めて 5 つある。

  1. Authorization Code Grant: RFC6749 – Section 1.3.1
    1. grant_type=authorization_code
    2. Authorization Code Grant with PKCE
  2. Implicit Flow: RFC6749 – Section 1.3.2
    1. もともと CORS (Cross Origin Resource Sharing) が登場する以前の SPA で、POST リクエストを回避しつつ Access Token を得る"妥協案"として策定された
    2. CSRF 耐性が無い (RFC6819 - Section 4.4.2.5)ため、使うべきではない
  3. Resource Owner Password Credentials Grant: RFC6749 – Section 1.3.3
    1. 直接パスワードで認証する形式
  4. Client Credentials Grant: RFC6749 – Section 1.3.4
    1. クライアントシークレットでトークンを取得する形式。
  5. Device Grant: RFC Draft — OAuth 2.0 Device Authorization Grant
    1. 入力機器が無い場合もある組み込みデバイス向けの認証フロー

RFC6750 — The OAuth 2.0 Authorization Framework: Bearer Token Usage

2012 年 10 月

OAuth 2.0 において、access_tokenをリソースサーバーに渡す手法を規定する。OAuth 2.0 JWT Bearer Token Flowではない

手法として 3 つが挙げられている。

  1. Bearer Token (SHOULD)
  2. Form Encoded Parameters (SHOULD NOT)
  3. URI Query Parameters (SHOULD NOT)

OIDC — OpenID Connect Core 1.0

2014 年 11 月

OAuth 2.0 の上にいくつか仕様を足したサブセットで、OAuth (Authorization)に Authentication の機能を付与した画期的なプロトコル。

RFC7515 — JSON Web Signature (JWS)

2015 年 5 月

JSON ベースの署名プロトコル。

RFC7516 — JSON Web Encryption (JWE)

2015 年 5 月

JSON ベースの暗号化プロトコル。

RFC7517 — JSON Web Key (JWK)

2015 年 5 月

JWT の署名チェックに用いる公開鍵を配信するためのプロトコル。

RFC7518 — JSON Web Algorithms (JWA)

2015 年 5 月

JWS、JWE、JWK で利用されるアルゴリズム (alg)やその他プロパティを規定する。

RFC7519 — JSON Web Token (JWT)

2015 年 5 月

JWT は JSON を利用して Assertion を生成するための仕様。

RFC7521 — Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants

2015 年 5 月

任意の Assertion を OAuth 2.0 Client Authentication の Client Credentials として使ったり、あるいは Authorization Grant として Access Token と交換するための仕様。

トークンエンドポイントに強化されたクライアント認証を付与する。続く RFC で、それぞれ SAML と JWT を使用したパターンを規定している。

OAuth 2.0 JWT Bearer Token Flowとも呼ばれている。

  • RFC7522 — Security Assertion Markup Language (SAML) 2.0 Profile for OAuth 2.0 Client Authentication and Authorization Grants (2015 年 5 月)
  • RFC7523 — JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants (2015 年 5 月)

2015 年 5 月 https://tools.ietf.org/html/rfc7523

RFC Draft — JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens

2019 年 7 月

リソースサーバーへ渡す Access Token に JWT を使用することを定めている。