OpenID Connect クライアント管理の設定方法

MuleSoft は Anypoint Platform で Salesforce、Okta、OpenAM v14 の動的クライアント登録のサポートを検証します。

  • このインテグレーションを通じて作成されたクライアントの更新は現在サポートされていません。

  • このインテグレーションを通じて作成されたクライアントの削除はサポートされていますが、クライアントが Anypoint Platform から削除されても OpenID Connect 承認サーバに残り、キャッシュされたトークンの有効期限が切れるまで API ポリシーで有効と見なされるという制限があります。

  • この機能を有効にするには、​[Advanced (詳細)]​ 設定リンクの ​[Enable client deletion in Anypoint (Anypoint でクライアントの削除を有効化する)]​ チェックボックスをオンにしてオプトインする必要があります。

次のテーブルで、登録中にプロバイダに応じて指定する必要がある URL の例を示します。

URL 名

Okta の URL 例

OpenAM の URL 例

Salesforce の URL 例

Base (ベース)

https://example.okta.com/oauth2/v1

https://example.com/openam/oauth2

https://example.salesforce.com/services/oauth2

Client Registration (クライアント登録)

​{BASE URL}​/clients

​{BASE URL}​/connect/register

​{BASE URL}​/register

Authorize (承認)

​{BASE URL}​/authorize

​{BASE URL}​/authorize

​{BASE URL}​/authorize

Token (トークン)

​{BASE URL}​/token

​{BASE URL}​/access_token

​{BASE URL}​/token

Token Introspection (トークンイントロスペクション)

​{BASE URL}​/introspect

​{BASE URL}​/introspect

​{BASE URL}​/introspect

  1. 組織のシステム管理者​ロールを使用して、Anypoint Platform でマスタ組織にサインインします。

  2. Anypoint Platform で、​[Access Management (アクセス管理)]​ をクリックします。

  3. 左側のメニューで、​[External Identity (外部 ID)]​ をクリックします。

  4. ドロップダウンで、​[Client Management (クライアント管理)] > [OpenID Connect Dynamic Client Registration (OpenID Connect 動的クライアント登録)]​ を選択します。

    select openid client mgmt

    [External Identity (外部 ID)]​ ページが表示されます。

  5. [Client Management (クライアント管理)]​ で、ID プロバイダの設定から値を取得した後に、各セクションの次の必須項目に入力します。

    • 動的クライアント登録

      • Issuer (発行者)​: OpenID プロバイダアサートがその信頼される発行者である URL。

      • Client Registration URL (クライアント登録 URL)​: クライアントアプリケーションを ID プロバイダのクライアントアプリケーションとして動的に登録するための URL。

      • (省略可能) ​[Advanced settings (詳細設定)]​ をクリックして動的クライアント登録要求の ​[Authorization Header (認証ヘッダー)]​ を追加します。このヘッダーは、プロバイダが承認済みのクライアントに対する登録要求を制限している場合に必須です。

        • Okta の場合、この値は ​SSWS ${api_token}​ です。ここで、​api_token​ は Okta を通じて作成される API トークンです。

        • ForgeRock の場合、この値は ​Bearer ${api_token}​ です。ここで、​api_token​ は ForgeRock を通じて作成される API トークンです。

        • Salesforce の場合、この値は ​Bearer ${api_token}​ です。ここで、​api_token​ は Salesforce を通じて作成される API トークンです。 ​[Advanced Settings (詳細設定)]​ では、以下のオプションを選択することもできます。

        • Disable server certificate validation (サーバ証明書の検証を無効化)​: OpenID クライアント管理インスタンスで自己署名証明書、または内部認証機関によって署名される証明書が表示される場合、サーバ証明書の検証を無効にします。

        • Enable client deletion in Anypoint Platform (Anypoint Platform でクライアントの削除を有効化)​: このインテグレーションで作成されたクライアントの削除を有効にします。

        • Enable client deletion and updates in IdP (IdP でクライアントの削除および更新を有効化)​: このオプションを使用するには、​[Enable client deletion in Anypoint Platform (Anypoint Platform でクライアントの削除を有効化)]​ オプションも選択する必要があります。このオプションにより、Anypoint Platform によって ​{clientRegistrationUrl}/{clientID}​ に対して行われたアウトバウンドコールを通じて設定済みの IdP で外部クライアントの更新および削除が可能になります。​clientRegistrationUrl​ は ​[Client Registration URL (クライアント登録 URL)]​ で設定した値です。たとえば、​https://identity.example.com/oauth2/connect/register/6779ef20e75817b79602​ のようにします。

          • Authorization:​ ヘッダーは、​[Advanced settings (詳細設定)]​ の ​Authorization Header​ が設定されている場合のみ要求に含まれます。

          • 渡される ​client_id​ 要求パラメータは、​PUT​ 要求ペイロードで渡される ​client_id​ と同じです。

          • ペイロードで渡される ​token_endpoint_auth_method​ は常に ​client_secret_basic​ です。

          • OIDC の ​[Client management (クライアント管理)]​ で設定した内容から取得されるのは、​Client Registration URL​ と ​Authorization Header​ のみです。
            PUT​ (更新) 要求のペイロードの例を次に示します。

            PUT /oauth2/connect/register/{{client_id}}
            Accept: application/json
            Host: identity.example.com
            Authorization: Bearer access-token
             {
                 "client_id": "client_id",
                 "client_secret": "some-secret",
                 "redirect_uris": [
                      "https://example.com/"
                  ],
                 "grant_types": [ "authorization_code" ],
                 "token_endpoint_auth_method": "client_secret_basic",
                 "response_types": [ "code" ],
                 "client_name": "test-client-name"
            }
            要求の ​client_name​ はインバウンド側の ​name​ にマップされます。
            認証方法は許可種別によって異なります。たとえば、許可種別が ​implicit​ の場合、​id_token​ と ​token​ が返されます。

            DELETE​ 要求ヘッダーの例を次に示します。

            DELETE /oauth2/connect/register/{{client_id}}
            Host: identity.example.com
            Authorization: Bearer access-token
            コールが直接 IDP に対して使用されている場合、​PUT​ と ​DELETE​ のどちらもが機能しないことが予期されます。自分で管理しているアプリケーションを参照することによるインターセプトを目的としているため、特定のプロバイダ用に適切な削除および更新の API を実装できます。
    • Token Inspection Client (トークンインスペクションクライアント)

      • Client ID (クライアント ID)​: すべてのクライアントの​ すべて ​のトークンのイントロスペクションが可能な IdP の既存のクライアントのクライアント ID。

        • Okta の場合、この値は「Confidential (機密)」クライアントである必要があります。

        • ForgeRock の場合、この値は「Confidential (機密)」クライアントである必要があります。

        • Salesforce の場合、この値は「Confidential (機密)」クライアントである必要があります。

      • Client Secret (クライアントシークレット)​: クライアント ID に対応するクライアントシークレット。

    • OpenID Connect Authorization URLs (OpenID Connect 認証 URL)

      • Authorize URL (認証 URL)​: ユーザが OpenID Connect クライアントアプリケーションを認証してユーザの ID へのアクセスを許可する URL。

      • Token URL (トークン URL)​: 安全な JSON Web トークンでエンコードされたユーザの ID を提供する URL。

  6. [Save (保存)]​ をクリックします。

  7. サインアウトして、組織の SSO URL に移動します。たとえば、次のようになります。

    https://anypoint.mulesoft.com/accounts/login/{yourOrgDomain}

  8. ID プロバイダを通じてサインインし、設定をテストします。

これを正常に設定すると、API Manager を通じて OpenID Connect OAuth トークン適用ポリシーを API ゲートウェイに適用できます。API Portal を通じて API アクセスを要求すると、トークンプロバイダとして機能する設定済みの IDP でクライアントアプリケーションが動的に生成されます。

Okta の場合、Okta システム管理者は動的に生成されたクライアントをユーザまたはユーザのグループに割り当てて、クライアント ID およびクライアントシークレットを送信することでアクセストークンを受信できるようにする必要があります。

許可種別

クライアント管理用に OpenID Connect プロバイダを設定した場合、Anypoint Platform は API Portal で API クライアントアプリケーションを登録するときにデフォルトで次の OAuth 許可種別をサポートします。

  • Implicit (暗黙的)

  • Authorization (承認)

  • Refresh Token (更新トークン)

[Refresh token (更新トークン)] を選択できるのは、認証許可種別も選択している場合のみです。

これらのスコープに加えて、OIDC Dynamic Client 登録プロバイダのセットアップ中に [Issuer (発行者)] 項目を設定している場合、Anypoint Platform は Anypoint Platform UI にプロバイダでサポートされるすべての許可種別を自動的に入力します。これには、クライアントログイン情報、パスワードなどの許可種別が含まれます。

Was this article helpful?

💙 Thanks for your feedback!

Edit on GitHub