---
title: OAuth 2.0 と JWT 関連 RFC
date: 2021-02-11
---

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

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

## [RFC6750](https://tools.ietf.org/html/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](https://openid.net/specs/openid-connect-core-1_0.html) — OpenID Connect Core 1.0

2014 年 11 月

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

## [RFC7515](https://tools.ietf.org/html/rfc7515) — JSON Web Signature (JWS)

2015 年 5 月

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

## [RFC7516](https://tools.ietf.org/html/rfc7516) — JSON Web Encryption (JWE)

2015 年 5 月

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

## [RFC7517](https://tools.ietf.org/html/rfc7517) — JSON Web Key (JWK)

2015 年 5 月

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

## [RFC7518](https://tools.ietf.org/html/rfc7518) — JSON Web Algorithms (JWA)

2015 年 5 月

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

## [RFC7519](https://tools.ietf.org/html/rfc7519) — JSON Web Token (JWT)

2015 年 5 月

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

## [RFC7521](https://tools.ietf.org/html/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](https://tools.ietf.org/html/rfc7522) — Security Assertion Markup Language (**SAML**) 2.0 Profile for OAuth 2.0 Client Authentication and Authorization Grants (2015 年 5 月)
- [RFC7523](https://tools.ietf.org/html/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](https://tools.ietf.org/html/draft-ietf-oauth-access-token-jwt-02) — JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens

2019 年 7 月

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