我在Debug.Print TypeName(ClassCoreVariables("All_ACM")())
注册了一个外部openidconnect
身份提供商。当客户端应用程序尝试访问受保护资源时,它会被重定向到Keycloak
登录页面。在登录页面上,我启用了外部KeyCloak
提供程序按钮。一旦用户点击按钮,他就会被带到外部身份提供者(即identityserver3实例)。外部提供程序会对用户进行身份验证并发回代码。
现在外部身份提供商中注册客户端的重定向是keycloak的重定向。因此,在外部IDP验证成功后,它会将代码(因为它是Auth代码流)发送回重定向网址上的keycloak:
在网址中,如果您看到它以openidconnect
结尾。我不认为这是正确的,但我无法在KeyCloak(它被禁用)中更改它,因为在外部IDP客户端配置中也是如此。
KeyCloak在使用身份提供商进行身份验证时无法理解上述网址和错误消息"意外错误"
Isn&#t; t endpoint
应该理解代码流,并在收到代码后再发出令牌请求。然后外部IDP将使用令牌进行响应,KeyCloak
会将该令牌发送回客户端(也会将其存储以备将来使用)。
有人可以分享一些关于Keycloak
如何与外部openidconnect ID提供程序一起使用代码流的知识。
答案 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_id
,secret
和token endpoint
?您可以在identityserver3的令牌端点中手动测试我发布的client_id
,secret
,code
(您收到的)。