0

外部 OpenID Connect IDP を使用して wso2 Identity サーバーをテストしています。外部 IDP は GLUU です。

私のテスト ケースには、次の 3 つのコンポーネントがあります。

  • localhost:8099 にデプロイされた単純な Web アプリ
  • localhost:9443 にデプロイされた wso2 Identity Server (デフォルトのポートを使用)
  • localhost にデプロイされた GLUU サーバー (デフォルトのポートを使用)

私が取得したいフローは、OpenId Connect の authentication_code です。私の「単純な Web アプリ」(wso2is のサービス プロバイダーのように構成されています) は、wso2is へのコードを必要とし、GLUU ログイン ページにリダイレクトされ、認証コードを取得し、認証コードを交換します。アクセストークン用。

「単純な Web アプリ」は、「OAuth/OpenId Connect 構成」タイプのインバウンド認証構成を使用して、wso2is (「サービス プロバイダー テスト」という名前) にサービス プロバイダーとして登録されます。この構成では、「単純な Web アプリ」のコールバック URL と、単純な Web アプリがアクセス トークンを取得するために使用するクライアント シークレットとクライアント ID を設定しました。

「ローカルおよびアウトバウンド認証構成」セクションのこの「サービス プロバイダー テスト」は、「My Gluu テスト IDP」を使用してフェデレーション認証に設定されています。

My Gluu Test IDP は、wso2is の「サービス プロバイダー」に追加した ID プロバイダーの名前です。Gluu の証明書を「My Gluu Test IDP」にアップロードしました。

"My Gluu Test IDP" の "Federated Authenticators" セクションで、GLUU IDP の情報 (クライアント ID、シークレット、トークン、および認証エンドポイント) と次の URL コールバックを使用して "OAuth/OpenId Connect Configuration" をセットアップしました。https://localhost:9443/commonauth

これが前提でした。

私はこのシナリオを初めて試しましたが、これは私が得たものです:

  1. 「シンプルな Web アプリ」から wso2is 認証エンドポイントを呼び出す
  2. GLUUログインページにリダイレクト
  3. 認証コードの代わりにエラーが表示された「単純な Web アプリ」コールバック URI に戻ります:

このエラーに関連する wso2is ログは次のとおりです。

TID: [-1234] [] [2018-09-21 10:33:10,529] エラー {org.wso2.carbon.identity.application.authentication.framework.handler.step.impl.DefaultStepHandler} - invalid_client、クライアント認証に失敗しました(不明なクライアント、クライアント認証が含まれていない、またはサポートされていない認証方法など)。認可サーバーは、どの HTTP 認証方式がサポートされているかを示すために、HTTP 401 (Unauthorized) ステータス コードを返す場合があります。クライアントが Authorization リクエスト ヘッダー フィールドを介して認証を試みた場合、認可サーバーは HTTP 401 (Unauthorized) ステータス コードで応答し、クライアントが使用する認証スキームと一致する WWW-Authenticate レスポンス ヘッダー フィールドを含めなければなりません (MUST)。org.wso2.carbon.identity.application.authentication.framework.exception.AuthenticationFailedException: invalid_client、クライアント認証に失敗しました (e. g. 不明なクライアント、クライアント認証が含まれていない、またはサポートされていない認証方法)。認可サーバーは、どの HTTP 認証方式がサポートされているかを示すために、HTTP 401 (Unauthorized) ステータス コードを返す場合があります。クライアントが Authorization リクエスト ヘッダー フィールドを介して認証を試みた場合、認可サーバーは HTTP 401 (Unauthorized) ステータス コードで応答し、クライアントが使用する認証スキームと一致する WWW-Authenticate レスポンス ヘッダー フィールドを含めなければなりません (MUST)。org.wso2.carbon.identity.application.authenticator.oidc.OpenIDConnectAuthenticator.getOauthResponse(OpenIDConnectAuthenticator.java:585) で org.wso2.carbon.identity.application.authenticator.oidc.OpenIDConnectAuthenticator.processAuthenticationResponse(OpenIDConnectAuthenticator.java:370)でorg.wso2.carbon.identity.application で。NioEndpoint$SocketProcessor.run(NioEndpoint.java:1734) で java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) で java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) で org .apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:748) 原因: OAuthProblemException{error='invalid_client', description='クライアント認証に失敗しました (未知のクライアント、クライアント認証が含まれていない、またはサポートされていない認証方法など)。認可サーバーは、どの HTTP 認証方式がサポートされているかを示すために、HTTP 401 (Unauthorized) ステータス コードを返す場合があります。クライアントが Authorization リクエスト ヘッダー フィールドを介して認証を試みた場合、

このエラーの後、GLUU 管理 UI を使用して、「トークン エンドポイントの認証方法」を client_secret_basic から client_secret_post に変更し、テストを再試行したところ、すべて正常に動作しました。

  1. 「単純な Web アプリ」から wso2is 認証エンドポイントを呼び出します。
  2. GLUUログインページにリダイレクト
  3. WSO2IS 認証ページにリダイレクトします (OpenID User Claims Service Provider Test アプリケーションがプロファイル情報へのアクセスを要求します...)
  4. 認証コードを使用して、「単純な Web アプリ」コールバック uri に戻ります:
  5. 私の「単純な Web アプリ」は wso2is 認証エンドポイントを呼び出し、コードを渡し、accecc_token を取得します。

そして最後に私の質問:

このテスト シナリオでは、外部 IDP の構成を変更できますが、実際のシナリオでは、外部 IDP でそのパラメーターを変更できませんでした。WSO2IS ID プロバイダーの構成で、client_secret_basic、client_secret_post、client_secret_jwt、private_key_jwt、none から選択する方法が見つかりませんでした。

GLUU IDP 設定を client_secret_basic から client_secret_post に変更せずに、このシナリオを機能させるには wso2is の構成で何を変更する必要がありますか?

4

1 に答える 1

1

IS 5.6.0 以降では、クライアント認証メカニズムを構成するオプションがあります。IdP 設定の「OAuth2/OpenID Connect 構成」で、「クライアント認証の HTTP 基本認証を有効にする」プロパティを使用して、要件を達成できます。

于 2018-10-06T17:38:49.213 に答える