【问题标题】:How does the authorization rules are validated by keycloak authorization server using spring rest adapterkeycloak授权服务器如何使用spring rest适配器验证授权规则
【发布时间】:2019-03-20 17:09:59
【问题描述】:

我已经设置了 keycloak 服务器并使用 keycloak rest 适配器创建了 spring rest 应用程序。授权规则工作正常。

我想了解 keycloak 弹簧靴支架适配器的内部工作原理。如何根据 keycloak 管理客户端中设置的策略和权限验证登录用户的令牌。

【问题讨论】:

  • 阅读这篇博文的后半部分sandor-nemeth.github.io/java/spring/2017/06/15/…
  • 嗨@ChirdeepTomar,感谢您的回复和指向文件。上面的链接解释了访问令牌中提供的基于角色的授权的基础知识(JWT.io url,您可以查看角色信息)。 Keycloak 提供了更细粒度的授权服务,这些授权服务将具有权限对象。权限对象在访问令牌中将不可用,您需要再次调用令牌端点以检索将具有权限对象的 RPT 令牌。在 Spring Boot 项目中是否需要再调用一次来确定权限?
  • 我希望如此,因为 access_token 或 id_token 中没有该信息。您可能需要通读适配器代码库才能找到答案。

标签: spring-boot oauth-2.0 keycloak spring-rest keycloak-services


【解决方案1】:

您是对的,访问令牌不包含所有这些详细信息。

在 Keycloak 中,当您使用服务器端适配器时,客户端将被配置为使用标准流程,而不是 OIDC 的隐式流程。

在标准流程中,当您使用 keycloak IDP 登录时,您的前端会重定向到 Keycloak IDP 并要求您提供凭据。如果您拥有正确的凭据,则登录成功,您将被重定向回您的应用程序。在此重定向中,您的应用程序会获取一个代码,然后将其发送到后端休息调用。此代码由 spring 启动应用程序中的 spring 适配器用于调用 Keycloak IDP 服务器,正是在此调用中,启动应用程序将获取用户上下文以将所有授权决策作为来自 Keycloak 服务器的响应。

希望这是有道理的。

【讨论】:

  • 嘿,@pulkit,非常感谢您的解释。有没有办法控制特定的流和访问类型(比如说 Spring Boot 适配器)使用,或者默认情况下它们通常坚持“隐式流”?
  • @skryvets 隐式流通常用于基于 JS 的适配器(前端驱动流),标准流用于 JBoss 适配器、Spring 引导适配器等服务器端适配器。要控制要使用的流程,请在 Keycloak 中创建一个新客户端。您可以登录 Keyclaok 实例的管理控制台来创建新客户端。理想情况下,每个应用程序都应该使用不同的客户端。在创建新客户端时,您需要设置许多配置项,其中一项是流参数。然后,您的应用程序将使用 client-id 参数使用此客户端。
猜你喜欢
  • 2017-11-30
  • 2015-03-31
  • 2018-08-15
  • 2019-08-01
  • 2017-08-09
  • 2017-11-13
  • 2021-11-20
  • 2019-10-08
  • 2015-05-22
相关资源
最近更新 更多