当前位置: 首页 > 知识库问答 >
问题:

使用Keycloak作为Azure AD的身份代理授予客户端凭据

西门飞翮
2023-03-14

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

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

使用 client_id 和 client_secret 进行身份验证后,我从 Keycloak 获取访问令牌,但当我尝试从 Keycloak endpoint检索外部 IdP 访问令牌时,我收到一条错误消息,指出“用户 [GUID] 未与身份提供程序关联”。我将不胜感激任何建议或反馈。

共有1个答案

梁学真
2023-03-14

感谢Sventorben张贴您的建议作为回答,以帮助其他社区成员。

尽管在来自Azure AD和Keycloak的客户端凭据上授予了权限,但不可能将来自Azure AD的访问令牌存储在Keycloak中,稍后再从Keycloak中检索它以向图形API发出请求。

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

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

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

 类似资料:
  • 我可以使用,其中一个keycloak客户机与另一个keycloak客户机通信。然而,只有当我登录到第一个keycloak客户机时,它才起作用,即它向keycloak服务器发送客户机ID、客户机机密、用户名和密码。如果我没有在第一个客户机上使用用户和密码进行身份验证,我会得到“无法设置授权头,因为没有身份验证原则”。但是我已经将keycloak配置为对第一个客户机使用服务帐户(客户机凭据授权),因此

  • 我们有一个第三方移动应用程序。它在登录过程中创建一个访问令牌,以使用授权码授权流访问我们的API(.netcore)之一。 https://docs.microsoft.com/en-us/azure/active-directory/develop/v1-protocols-oauth-code 该移动应用程序显示了许多互动程序。登录后,当用户单击其中一个互动程序时,我想调用另一个。netcor

  • 我喜欢从我自己的应用程序管理键斗篷:创建用户 请求一个访问令牌,其用户名:密码在标题 但答案是403: 如何/是否可能通过客户端凭据授权从新服务帐户访问Admin REST API?

  • 我开发Spring Cloud(使用Netflix OSS堆栈)微服务架构已经有一段时间了。正如您所料,我已经将授权服务器分离为一个独立的微服务。我的前端应用程序使用“密码”授权类型用于用户登录目的。但是,对于从前端服务到其他后端服务的rest调用,我使用的是“Client-Credentials”授权类型。客户机凭据授予类型也在其他后端服务中使用。通过这样做,我无法确定谁是请求的实际调用者(当前

  • OAuth2 JWT 配置文件引入了将 JWT 用作授权授予和客户端身份验证的可能性。 JWT客户端身份验证功能独立于特定的授权类型,并且可以与任何授权类型一起使用,也可以与客户端凭据授权一起使用。 但是,使用 JWT 授权类型似乎与将客户端凭据授予与 JWT 客户端身份验证结合使用完全相同,只是语法略有不同。 在这两种情况下,客户端都会联系令牌终结点以获取访问令牌: vs

  • 如果可能的话请告诉我。另外,我想传达的是Keycloak和openid-connect协议是全新的。