带有OpenIdConnect外部identityprovider的Keycloak

时间:2017-07-21 13:56:36

标签: identityserver3 openid-connect keycloak

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

现在外部身份提供商中注册客户端的重定向是keycloak的重定向。因此,在外部IDP验证成功后,它会将代码(因为它是Auth代码流)发送回重定向网址上的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

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

KeyCloak在使用身份提供商进行身份验证时无法理解上述网址和错误消息"意外错误"

Isn&#t; t endpoint应该理解代码流,并在收到代码后再发出令牌请求。然后外部IDP将使用令牌进行响应,KeyCloak会将该令牌发送回客户端(也会将其存储以备将来使用)。

有人可以分享一些关于Keycloak如何与外部openidconnect ID提供程序一起使用代码流的知识。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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