首先,我很了解Keycloak中的多领域多租户方法。我已经接管了一个遗留项目,没有人想到多租户。现在,两年后,突然,客户需要此功能。实际上,微服务是开箱即用的。
客户开发了一个移动应用,该应用通过我们的密钥斗篷实例上的API使用帐号(作为用户名)和密码对用户进行身份验证。现在,他想在登录信息中添加一个租户ID。
客户希望避免使用多个端点,这是多领域解决方案所需要的。
第一个想法是在注册时将租户ID和帐户ID串联起来。但这是一种臭气冲冲的方法。
因此,我认为可能存在一种配置Keycloak的方式,即我添加了一个自定义tenantid字段,username其行为就像数据库世界中的复合主键一样。
这样的配置可行吗?是否有另一种方法可以使用单个领域实现多租户行为?
我AzureAD作为外部 OIDC 提供商在Keycloak. Keycloak将客户端授权请求重定向到AzureAD提供授权。Keycloak在公司代理后面的工作站上运行,相应的 Azure AD 托管在公共 Internet 中。我可以Postman从本地工作站连接到 Azure AD 。
授权通过AzureAD按预期工作(提示用户输入她/他的凭据并接受同意)。授权成功后,以authorization_codeAzureAD响应定义的Keycloakreturn-url:
http://localhost:5000/auth/realms/lsp-api/broker/ms-azure-ad/endpoint?code=AQABAAIAAADX8GCi6Js6SK82TsD2Pb7rL__pDRDcKAqDqyTeTdzmbC9n3kcz5flc0q7zDRbK-WVLUpcUU65tWSh9C-opFiwtMZOACwGLQDgh4y4ScLW-dUGN7g3Ad3_aBqK-uHPgS3uKM1OlAIeSw3NSl1DMTKhH7SGQRGITP6ARIrCL9snqNRDUbHvhfKVlLMxmJTUk0bKDIT3PzM4nBSd1NwdXc9VZ9cCFnRMjlKfpRUx3guo-58tgSL5Vsaf8TvKg8B5TSYbiDzS49epFsU0Eg_PBs1JU4Q-8vOrN_wlV1zs1IUDYbUv8EdlMdqJkaT-nBTv-4Ab2Jf3X39u4m666kvcWmezGJ-NkjPqaOSK6eglWJfjW_z9-vHFQl6F9JxdCIlGbolyZyUpo0-a0LlnVVg2gyl1wJEOSnv5RvhmTZOqa1qWxZNsyG15JeQBkcK-J0XzWmn8CaeqzsJwFlNwkpzK_XaZW-KIsWayZ0Rz2HdDYh3Mre2I4uRmDyoQLiP60lYDaYowZZ11jSBy_87vFL2alK-5sGyUajs6kODfsoSlEGHhWJeHMiC2-jYm0gMNTQIvUMYpLJRpgKX6v3n-E3Q7ZlYD_VAWOnDZBCR5iaTsUOxuXN6CiC4p01N47c4QG4Y8A9lTbVXDvVcxSBz8H7uM5DfawFGUKpSCobI9V1XKnyw1R8UXTObqmEq8gA4jBzaRZb89qAnlZ6X-w39LbLWE7MUlL0Ok8LP-7omQlVei6AdEMfrIaHNIBUFimHLgKjiqcG2ogAA&state=FevrPXHHXkICQjFEYJ_3ZyvfZ2Y9E6iM5foCcOvk5C8.jXAAgdz4mnA.lsp-api&session_state=8cb0539a-b775-4de6-b334-5cb24caeb685
Run Code Online (Sandbox Code Playgroud)
此响应与状态代码一起发送502, Bad Gateway。此外,还会显示错误消息“使用身份提供程序进行身份验证时出现意外错误”。
我已经尝试将返回的authorization_code手动发送到AzureAD /token端点,并且收到了access_token和id_token返回。所以问题似乎出在Keycloak-side的响应处理上。
预期行为是:
AzureAD响应Keycloak与authorization_codeKeycloak能够交换authorization_code一个access_token(mb。另外一个id_token)什么不起作用:
Keycloak无法将 authorization_code 交换为access_token,但会引发“与身份提供者进行身份验证时出现意外错误”错误消息。
钥匙斗篷设置:
Keycloak 版本:4.1.0.Final
该AzureAD Reply-URL设置为HTTP://本地主机:5000 /认证/领域/ LSP-API /经纪人/ …
proxy oauth-2.0 azure-active-directory openid-connect keycloak
我有一个openidconnect注册的外部身份提供商Keycloak。当客户端应用程序尝试访问受保护的资源时,它会被重定向到KeyCloak登录页面。在登录页面上,我openidconnect启用了外部提供商按钮。一旦用户单击按钮,他就会被带到外部身份提供者(即identityserver3实例)。外部提供商对用户进行身份验证并发回代码。
现在,外部身份提供商中注册客户端的重定向 URL 是 keycloak 的重定向 URL。因此,在外部 IDP 身份验证成功后,它会将代码(因为它是身份验证代码流)发送回重定向 url 处的 keycloak:
在 URL 中,如果您看到它以endpoint. 我认为这是不正确的,但我无法在 KeyCloak 中更改它(它已被禁用),并且因此在外部 IDP 客户端配置中。
KeyCloak 无法理解上述 url,并出现错误并显示消息“使用身份提供程序进行身份验证时出现意外错误”
不应该KeyCloak理解代码流程并在收到代码后再次请求令牌。然后外部 IDP 将使用令牌进行响应,并将Keycloak该令牌发送回客户端(还将存储它以供将来使用)。
有人可以分享一些关于如何Keycloak通过代码流与外部 openidconnect ID 提供程序配合使用的知识吗?