【问题标题】:Spring Authorization Server - Configure User Info Endpoint - Spring Roles in Resource ServerSpring 授权服务器 - 配置用户信息端点 - 资源服务器中的 Spring 角色
【发布时间】:2022-01-18 14:16:40
【问题描述】:

我有一个配置为使用 Spring 用户规则作为安全方法的现有资源服务器。我正在尝试迁移到 Spring Authorization 服务器,并试图弄清楚如何在资源服务器中访问这些角色。

当用户进行身份验证时,我可以在调试日志中看到我的角色是授权用户详细信息的一部分。但在资源服务器中,我从 OidcService 获取默认角色,并将范围作为授予权限。

我知道 Spring Authorization server 0.21 已经实现了 User Info 端点,但似乎没有关于如何配置它的示例或文档,我确信实现它会解决我的问题。

我正在考虑的另一个选项是在服务器中配置 oauth2TokenCustomizer,然后在 JWT 的声明中添加角色。然后在资源服务器中考虑覆盖默认 OidcService 并解析声明以添加角色作为授予权限。但问题在于 OidcUserService 我没有看到任何可以让我访问 JWT 声明的代码。

public class CustomOAuth2Token implementsOAuth2TokenCustomizer<JwtEncodingContext> {

@Override
public void customize(JwtEncodingContext context) {
    // Load user details and add roles to claims
}

}

可能必须为 OidcAuthorizationCodeAuthenticationProvider 提供自定义扩展,然后修改经过身份验证的主体详细信息。

【问题讨论】:

标签: spring spring-boot spring-security


【解决方案1】:

我也遇到了同样的问题。

自定义“知名”openid-configuration 端点的响应有些棘手,因为 filter handling this endpoint 具有硬编码映射,其中包含响应中的字段。

我通过以下方式解决了这个问题:

  • 将此类复制到我的代码库中并为其命名,在我的例子中为 CustomOidcProviderConfigurationEndpointFilter
  • 使用我的自定义类作为 OidcProviderConfigurationEndpointFilter replacing it entirely 的 objectPostProcessor 而不仅仅是自定义它。

这意味着您的自定义过滤器将从现在开始提供 OidcProviderConfiguration 对象。 然后,您可以对该对象调用 claim 方法来添加诸如“userinfo_endpoint”之类的属性。

注意:我无法正确格式化本文第二个链接中的代码 sn-p。如果具有管理权限的人可以编辑此内容,那就太好了。

【讨论】:

  • 我能够自定义令牌并在身份验证服务器端添加自定义声明。您可以将 OAuth2TokenCustomizer 的实现作为 bean 提供,这将被调用以将我的案例角色中的其他信息添加到令牌中的声明中。我不确定的是资源服务器端的事情,因为这仍然需要解析并进入经过身份验证的主体的授予权限。
猜你喜欢
  • 2015-05-14
  • 2016-04-20
  • 2015-11-19
  • 2016-05-21
  • 2014-07-09
  • 2018-08-29
  • 2019-04-05
  • 2015-05-14
  • 2022-08-03
相关资源
最近更新 更多