【问题标题】:Keycloak with OpenIdConnect external identityprovider带有 OpenIdConnect 外部身份提供者的 Keycloak
【发布时间】:2017-12-27 14:52:02
【问题描述】:

我有一个在Keycloak 注册的外部openidconnect 身份提供者。当客户端应用程序尝试访问受保护的资源时,它会被重定向到KeyCloak 登录页面。在登录页面上,我启用了外部 openidconnect 提供程序按钮。一旦用户单击按钮,他就会被带到外部身份提供者(即 identityserver3 实例)。外部提供者确实对用户进行身份验证并发回代码。

现在外部身份提供者中注册客户端的重定向网址是 keycloak 的重定向网址。因此,在外部 IDP 身份验证成功后,它会将代码(因为它是身份验证代码流)发送回重定向 url 处的 keycloak:

http://localhost:5555/auth/realms/QA/broker/keycloak-client/endpoint?code=7bcf5157105199d50874e64eabf03858&state=wQhNIEKW0Ws6CotZg2EsvOorjDVQlWVvobcM2skPSXo.keycloak-client&session_state=rhgu-BXT8FniG9Z-UARKpp_f-V1nLN-VxFmSE3PSxDg.99b2d903367208e4261fefa475afb1eb

在 URL 中,如果您看到它以 endpoint 结尾。我不认为这是正确的,但我无法在 KeyCloak 中更改它(它已被禁用)并且因为在外部 IDP 客户端配置中。

KeyCloak 不理解上面的 url 并出现错误消息“使用身份提供者进行身份验证时出现意外错误”

KeyCloak 不应该理解代码流程并在收到代码后再次请求令牌。然后外部 IDP 将使用令牌进行响应,Keycloak 会将该令牌发回给客户端(也将存储它以备将来使用)。

有人可以分享一些关于Keycloak 如何通过代码流与外部 openidconnect ID 提供者合作的知识。

【问题讨论】:

  • 嗨。你有解决办法吗?

标签: identityserver3 openid-connect keycloak


【解决方案1】:

通常,外部身份提供者的重定向 URI 采用 {keycloak-host}/auth/realms/{realm}/broker/{provider}/endpoint 的形式。当您在外部身份提供者中注册您的客户端时,您必须将其指定为重定向 URI。通过外部 IdP 对用户进行身份验证后,授权码将发送到此 url,然后将其重定向到客户端应用程序的重定向 url(在 Keycloak 中注册客户端时指定)。

Unexpected error when authenticating with Identity Provider 是 Keycloak 针对 OAuth 流程期间发生的几个错误发送的一般错误消息。如果不通过堆栈跟踪或提示中的日志,您将无法确定实际原因。

【讨论】:

    【解决方案2】:

    您收到此错误是因为 keyclaok 无法通过交换授权码从 identityserver3 获取令牌。您在哪里托管 identityserver3?它是否具有真正的 ca 证书或者您正在使用自签名证书?您是否在 keycloak 外部 IDP 配置中正确配置了client_idsecrettoken endpoint?您可以手动测试我在 identityserver3 的令牌端点中发布的 client_idsecretcode(您收到的)。

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-10
      • 2020-03-01
      • 2014-11-27
      • 2020-12-07
      • 1970-01-01
      相关资源
      最近更新 更多