🔲 認証コードからJWTトークの取得
認証コードからJWTトークンを取得するnode-redのflow
「JWTトークンの取得と検証」の章と同じnode-red flow を使います。異なる点は、リクエストflowからユーザIDとパスワードを削除し、認証情報の代わりとして「”grant_type”:”authorization_code”」を指定し、ここで、Authentication Requestで取得した認証コードを入力します。
endpoint_tokenを使ったJWTトークン取得のスクリプト
- 用意するデータ
- client_id:test-client
- client_secret:secret_key
- redirect_uri:redirect_uri ※認証時に指定したuri とKeycloakのuriが一致していること
- grant_type:authorization_code
- code:認証コード ※取得した認証コード(ワンタイム使用)
const host_ip = msg.host_ip; const secret_key = msg.secret_key; const code = msg.code; const redirect_uri = msg.redirect_uri; msg.payload = { "client_id": "test-client", "client_secret": secret_key, "redirect_uri": redirect_uri, "grant_type":"authorization_code", "code": code } msg.headers = {"Content-Type":"application/x-www-form-urlencoded"}; const endpoint = "/realms/demo/protocol/openid-connect/token"; msg.url = host_ip + endpoint; return msg;
認証コードとは? Authentication Requestで取得した”code”:”ef………..”のJSONオブジェクトデータです。
認証コードから取得したJWTトークンの実行結果
debugにJWTトークン(access_token,refresh_tokenなどのオブジェクトデータ)を取得
access tokenの検証結果です。access tokenの有効性検証でもtrueとなっています。
🔸 認証コードはワンタイムの有効性
- 認証コードの特徴として、
- 有効期限が短い
- ワンタイム使用となっている。1回のみ有効
同じ認証コードを使って、JWTトークンの取得を試みても下記の通り、「invalid error」となる。
🔲 JWTトークン取得のまとめ
JWTトークンの取得には、「パスワード」方式と「認証コード」方式の2種類以外にも多数用意されています。※「refresh_token」については、別途解説します。今回説明した認証コード方式及び取得したJWTトークンを用いた認可システム(APIサービス)であれば、ユーザの認証情報を必要としないため、不正なWebサービスによるパスワードが盗用される心配がありません。SSOを実装する上で重要な機能となります。それぞれ、アプリケーションの機能や目的に合わせて、利用しましょう。