認証コードからJWTトークの取得

🔲 認証コードから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を実装する上で重要な機能となります。それぞれ、アプリケーションの機能や目的に合わせて、利用しましょう。