LoginSignup
1
3

More than 1 year has passed since last update.

OAuth2.0 JWT ベアラートークンフロー メモ

Last updated at Posted at 2021-04-02
  • OAuth2.0 JWTベアラートークンフローについてメモする。

JWTとは

  • JSON Web Tokenの略称。発音は"ジョット"。

  • 属性情報(Claim)をJSON構造で表現したトークン仕様(RFC7519)を指す。

    • 発行者(Issuer)、利用者(Audience)、ユーザー(Subject)などが含まれる。
  • 特徴

    • 署名、暗号化ができる。
    • URL-safe(URLとして利用出来る文字だけ構成される)。
  • 関連仕様

    • JSON Web Signature(JWS):JSON構造を使用して署名するための仕様(RFC7515)
    • JSON Web Encryption(JWE):JSON構造を用いて暗号化するための仕様(RFC7516)
    • 署名付きデータの場合はJWS、暗号化する場合はJWEの仕様に基づき、JWTが利用される。
  • 用途

    • OAuth2.0 アクセストークンの取得
    • OpenID Connect IDトークン(認証情報に関するクレームを含んだトークン)  
    • など

JWT ベアラートークンフロー

概要

  • クライアント側で生成したJWTを指定してトークンリクエストを行う。
  • システム間連携を行う際に、認証・接続毎にユーザ操作を行うことができない・したくない場合に利用する。

シーケンス

JWTBearerFlow.png

※Salesforceでのフローを参考に作成。

※署名方式に応じた署名用情報(秘密鍵、証明書)の発行・登録を行う。

1. JWT生成

1. JSON形式でヘッダーを定義し、Base64URLエンコードする(encoded_header)。以下例。

{
  "typ": "JWT",
  "alg": "RS256"
}

2. JSONクレームセットを定義し、Base64URLエンコードする(encoded_claims_set)。以下例。

{
 "iss": "3MVG99OxTyEMCQ3gNp2PjkqeZKxnmAiG1xV4oHh9AKL_rSK.BoSVPGZHQukXnVjzRgSuQqGn75NL7yfkQcyy7", 
	"sub": "my@email.com", 
	"aud": "https://login.salesforce.com", 
	"exp": "1333685628"
}

3. エンコード結果を”.”で連結する。

encoded_header+"."+encoded_claims_set

4. ヘッダーに指定したアルゴリズムで3の署名を生成し、Base64URLエンコードする(encoded_signature)。

5. 34を"."で連結する。

encoded_header+"."+encoded_claims_set.+"."+encoded_signature

2. トークンリクエスト

  • リクエスト例

    POST /token.oauth2 HTTP/1.1
    Host: as.example.com
    Content-Type: application/x-www-form-urlencoded
    
    grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
    &assertion=eyJhbGciOiJFUzI1NiIsImtpZCI6IjE2In0.
    eyJpc3Mi[...omitted for brevity...].
    J9l-ZhwP[...omitted for brevity...]
    
パラメータ 説明
grant_type urn:ietf:params:oauth:grant-type:jwt-bearer
assertion 1で生成したJWT

3. JWT検証

  • デコードし、iss,aud,subなどクレーム値や署名の検証を行う。

参考情報

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3