0

我正在尝试将客户端凭据授予使用 Keycloak 作为 Azure AD 的身份代理的后端服务。我还需要将来自外部 IdP 的访问令牌存储在 Keycloak 中,以从 MS Graph API 检索组信息。我有这个用例为使用授权代码流的机密客户端工作,但我无法让它与客户端凭据授权一起使用。

我在 Keycloak 中创建了一个启用了“启用服务帐户”的“机密”客户端。我还在 Azure AD 中创建了一个启用客户端凭据授予的应用程序,并在 Keycloak 中创建了一个外部身份提供程序。

在使用 client_id 和 client_secret 进行身份验证后,我从 Keycloak 获取访问令牌,但是当我尝试从 Keycloak 端点检索外部 IdP 访问令牌时,我收到一条错误消息,提示“用户 [GUID] 与身份提供者没有关联”。我很感激任何建议或反馈。

4

1 回答 1

1

谢谢Sventorben发布您的建议作为帮助其他社区成员的答案。

尽管 Azure AD 和 Keycloak 都授予客户端凭据,但无法将 Azure AD 的访问令牌存储在 Keycloak 中,然后从 Keycloak 检索它以向 Graph API 发出请求。

客户端使用客户端凭据授予类型来获取访问令牌。这完全超出了用户的上下文。在这种情况下,Keycloak 不会将请求转发或重定向到 AD。因此,永远不会有 AD 代币。如果您需要客户端凭据授权从 AD 发出令牌,则需要直接向 AD 发出请求。

从下面的文档看来,Keyclock 是代理,它永远不应该发送从 Azure AD 接收的原始访问令牌来访问 Graph API。只有您可以使用启用StoredTokens Readable开关读取令牌。

在此处输入图像描述

参考: https ://wjw465150.gitbooks.io/keycloakdocumentation/content/server_admin/topics/identity-broker/tokens.html

于 2021-08-18T10:20:47.223 回答