リモートの JWK セットを取得できませんでした。サーバーは HTTP 応答コードを返しました。Oracle Identity Cloud ServiceでOpenID Connect認証を使用すると401エラーが発生する

環境への配慮

  • Liferay DXP 7.0-7.3
  • オラクルアイデンティティクラウドサービス
  • OpenID Connect認証が有効

症状

Liferay DXPで OpenID Connect認証 が有効で、構成プロバイダがOracle Identity Cloud Service(IDCS)の場合、以下のエラーが発生し、ユーザーがLiferay DXPにサインインできないことがあります。

Caused by: com.nimbusds.jose.RemoteKeySourceException: Couldn't retrieve remote JWK set: Server returned HTTP response code: 401 for URL: https://idcs-6e0f2608732d4331a407d4a5583257ab.identity.oraclecloud.com:443/admin/v1/SigningCert/jwk
	at com.nimbusds.jose.jwk.source.RemoteJWKSet.updateJWKSetFromURL(RemoteJWKSet.java:167)
	at com.nimbusds.jose.jwk.source.RemoteJWKSet.get(RemoteJWKSet.java:258)
	at com.nimbusds.jose.proc.JWSVerificationKeySelector.selectJWSKeys(JWSVerificationKeySelector.java:113)
	at com.nimbusds.jwt.proc.DefaultJWTProcessor.selectKeys(DefaultJWTProcessor.java:288)
	at com.nimbusds.jwt.proc.DefaultJWTProcessor.process(DefaultJWTProcessor.java:347)
	at com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:288)
	at com.nimbusds.openid.connect.sdk.validators.IDTokenValidator.validate(IDTokenValidator.java:224)
	at com.liferay.portal.security.sso.openid.connect.internal.OpenIdConnectServiceHandlerImpl.validateToken(OpenIdConnectServiceHandlerImpl.java:652)
	... 60 more
Caused by: java.io.IOException: Server returned HTTP response code: 401 for URL: https://idcs-6e0f2608732d4331a407d4a5583257ab.identity.oraclecloud.com:443/admin/v1/SigningCert/jwk
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1919)
	at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515)
	at java.base/sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:250)
	at com.nimbusds.jose.util.DefaultResourceRetriever.getInputStream(DefaultResourceRetriever.java:249)
	at com.nimbusds.jose.util.DefaultResourceRetriever.retrieveResource(DefaultResourceRetriever.java:201)
	at com.nimbusds.jose.jwk.source.RemoteJWKSet.updateJWKSetFromURL(RemoteJWKSet.java:165)
	... 67 more

決議

JWKS エンドポイントは、IDCS テナントではデフォルトで保護されています。 でテストすることができます。

  1. テナントのディスカバリードキュメントに移動します:https://<tenant-base-url>/.known/openid-configuration
  2. レスポンスJSONから「jwks_uri」をクリックしてください(これはエラーで表示されるURLと同じになります): https://<tenant-base-url>/admin/v1/SigningCert/jwk

HTTP 401を取得した場合は、エンドポイントがあなたの環境で保護されていることを意味します。 OpenID Connectクライアント(Liferay DXPなど)は、認証応答で受信したIDTokenを検証するために、サーバーの署名証明書をロードするために、このリソースにアクセスする必要があります。

JWKSエンドポイントをパブリックにするには.

  1. Oracle IDCSコンソールにログイン
  2. 左のナビゲーションメニューにアクセス
  3. 設定 > デフォルト設定に移動します。
  4. Access Signing Certificate" の下で、トグルを有効に切り替えて、"クライアントがOracle Identity Cloud ServiceにログインせずにIDドメインの署名証明書にアクセスできるかどうかを構成します。"
  5. 保存

参考

この記事は役に立ちましたか?
1人中1人がこの記事が役に立ったと言っています