秘密鍵 JWT を使用したクライアント認証の構成

OpenID Connect (OIDC) の private_key_jwt (秘密鍵 JWT) クライアント認証は、Salesforce Login API and Access Service (SLAS) がサードパーティの ID プロバイダー (IDP) に対して自身を認証するための安全な方法です。この方法は、共有シークレットを使用する方法よりも安全な代替手段であり、高度なセキュリティ認証が求められる環境で一般的に採用されています。

共有シークレットを送信する代わりに、SLAS は自身の秘密鍵で署名した JSON Web Token (JWT) を使用します。次に、サードパーティの IDP は、SLAS が IDP に登録した対応する公開鍵を使用して、この JWT の署名を検証します。このプロセスでは、非対称暗号方式を活用することで強力な認証が実現され、共有シークレットに伴うリスクを防ぐとともに、漏えいや侵害の可能性を低減できます。

秘密鍵 JWT 認証フロー

SLAS が作成する JWT アサーションには、いくつかの必須クレームが含まれます。

  • iss (発行者) と sub (主体): どちらにもサードパーティ IDP の client_id が含まれます。
  • aud (対象者): サードパーティ IDP のトークンエンドポイント。
  • exp (有効期限): JWT の有効期限。
  • iat (発行時刻) が作成された時刻のタイムスタンプ。
  • jti (JWT ID): リプレイ攻撃を防ぐためのトークンの一意の識別子。

まず、private_key_jwt 認証用にクライアント IDP を構成します。たとえば Okta を使用する場合は、次の手順に従います。

  1. 公開鍵/秘密鍵クライアント認証を使用する Okta アプリケーションを作成します。
  2. Okta アプリケーションの公開鍵構成が、Okta にキーを保存するように設定されていることを確認します。

private_key_jwt 認証を構成するには、SLAS Admin UI を使用して鍵ペアを作成し、サードパーティ IDP 用の公開鍵を取得します。

  1. IDPs タブに移動します。
  2. Add Idp (Idp の追加) を選択します。
  3. 該当するすべての情報を追加します。
    1. URL とスコープを入力します。これらのフィールドを自動入力するには、サードパーティ IDP の OIDC Well-Known URL を入力します。たとえば、https://accounts.google.com/.well-known/openid-configuration です。次に、Search and Populate URLs (URL の検索と入力) をクリックします。
    2. ドロップダウンメニューからテナントを選択します。
    3. Idp name (IDP 名) フィールドに、サードパーティ IDP の名前を入力します。
    4. Secret (シークレット) フィールドに、「NA」と入力します。シークレットは必要ありませんが、SLAS ではプレースホルダー値が必要です。
    5. Idp Client Id (IDP クライアント ID) フィールドに、サードパーティ IDP のクライアント ID を入力します。
    6. Client Type (クライアントタイプ) フィールドで、ドロップダウンメニューから client_private_jwt を選択します。
    7. Key Algorithm (キーアルゴリズム) フィールドで、ドロップダウンメニューから鍵ペアアルゴリズムを選択します。指定されていない場合、デフォルト値は RS256 です。
    8. Login Merge Claims (ログインマージクレーム) フィールドに、IDP がサポートする userInfo クレームをスペース区切りで入力します。
  4. Add (追加) をクリックして構成を保存します。SLAS により、選択した鍵アルゴリズムを使用して公開鍵と秘密鍵のペアが作成されます。
  5. 生成された公開鍵 (Public Json Web Key) をコピーし、/token リクエストで SLAS が作成して送信する JWT の検証に使用できるよう、サードパーティ IDP に登録します。
  6. SLAS への認証呼び出しで、hint クエリパラメーターが新しい IDP と一致することを確認します。詳細は、Authorize customer (顧客の認可) を参照してください。

IDP の JWT 鍵ペアをローテーションするには、SLAS Admin UI を使用してクライアントタイプを client_secret に切り替えてから、client_private_jwt に戻します。この操作により、鍵ペアがローテーションされ、新しい公開鍵が作成されます。

  1. 「Idps」タブに移動します。
  2. キーをローテーションする IDP の Edit (編集) をクリックします。
    1. Client Type (クライアントタイプ) フィールドで、ドロップダウンメニューから client_secret を選択します。
    2. Save (保存) をクリックします。
  3. 同じ IDP の Edit (編集) をもう一度クリックします。
    1. Client Type (クライアントタイプ) フィールドで、ドロップダウンメニューから client_private_jwt を選択します。
    2. Key Algorithm (キーアルゴリズム) フィールドで、ドロップダウンメニューから鍵ペアアルゴリズムを選択します。指定されていない場合、デフォルト値は RS256 です。
    3. Save (保存) をクリックします。
  4. 生成された公開鍵 (Public Json Web Key) をコピーし、サードパーティ IDP に登録します。