【发布时间】:2021-10-08 02:41:19
【问题描述】:
我正在尝试将客户端凭据授予使用 Keycloak 作为 Azure AD 的身份代理的后端服务。我还需要将来自外部 IdP 的访问令牌存储在 Keycloak 中,以从 MS Graph API 检索组信息。我有这个用例为使用授权代码流的机密客户端工作,但我无法让它与客户端凭据授权一起使用。
我在 Keycloak 中创建了一个启用了“服务帐户启用”的“机密”客户端。我还在 Azure AD 中创建了一个启用了客户端凭据授予的应用程序,并在 Keycloak 中创建了一个外部身份提供程序。
在使用 client_id 和 client_secret 进行身份验证后,我从 Keycloak 获取访问令牌,但是当我尝试从 Keycloak 端点检索外部 IdP 访问令牌时,我收到一条错误消息,提示“用户 [GUID] 与身份提供者没有关联” .如有任何建议或反馈,我将不胜感激。
【问题讨论】:
-
您是否尝试使用服务帐户的凭据进行身份验证?该服务帐户在 Azure AD 中既不存在,在 AD 中也没有关联帐户。你能详细说明你想要达到的目标吗?
-
@sventorben,是的,我正在尝试使用服务帐户的凭据进行身份验证,并且我已验证 Azure AD 服务帐户(cliend_id 和 client_secret)存在并且可以正常工作。我想使用 Keycloak 作为 Azure AD 的身份代理,并且我想在双方都使用客户端凭据授予(即服务应用程序 -> Keycloak -> Azure AD)。我还想将 Azure AD 中的访问令牌存储在 Keycloak 中,然后从 Keycloak 中检索它以向 Graph API 发出请求。
-
抱歉,我认为这不可能。
-
@sventorben 你能解释一下为什么这是不可能的吗?
-
客户端凭据授权类型被客户端用来获取访问令牌。这完全超出了用户的上下文。在这种情况下,Keycloak 不会将请求转发或重定向到 AD。因此,永远不会有 AD 代币。如果您需要客户端凭据授权从 AD 发出令牌,则需要直接向 AD 发出请求。
标签: authentication azure-active-directory keycloak openid-connect clientcredential