【问题标题】:Spring Authorization server customizing the access token response to add additional paramsSpring 授权服务器自定义访问令牌响应以添加其他参数
【发布时间】:2022-02-15 03:52:31
【问题描述】:

我正在实现 spring 授权服务器,我想向令牌响应 json 添加一些自定义属性。以下是我希望的响应方式。

{
    "access_token": *jwt*,
    "scope": "articles.read openid",
    "token_type": "Bearer",
    "expires_in": 299,
    ***"customvalue1":99***
}

我在堆栈溢出中看到了多个讨论类似主题的帖子,但在这些情况下,附加数据被添加到声明或 jwt 的标题中。我的要求是将它添加到 jwt 之外。 我尝试实现 OAuth2TokenCustomizer,但这只允许修改 jwt 的声明或标头。有人可以帮忙吗?

【问题讨论】:

  • 寻找 TokenEnhancer
  • @silentsudo 在 spring 授权服务器 0.2.0 中已弃用

标签: spring spring-boot spring-security spring-security-oauth2


【解决方案1】:

如果您使用新的授权服务器,那么创建此 bean 将帮助您实现目标。好在,一旦检测到 bean,它就会自动应用。

@Bean
    public OAuth2TokenCustomizer<JwtEncodingContext> tokenCustomizer() {
        return context -> {
            Authentication principal = context.getPrincipal();
            //context.getTokenType().getValue().equals("access_token")
            if (Objects.equals(context.getTokenType().getValue(), "access_token") && principal instanceof UsernamePasswordAuthenticationToken) {
                Set<String> authorities = principal.getAuthorities().stream()
                        .map(GrantedAuthority::getAuthority).collect(Collectors.toSet());
                User user = (User) principal.getPrincipal();
                context.getClaims().claim("authorities", authorities)
                        .claim("user", user);
            }
        };
    }

How to create custom claims in JWT using spring-authorization-server 的副本

【讨论】:

  • 我使用的是新的授权服务器,你提供的sn-p会在声明里面添加额外的参数,而不是在外面。我想要 jwt 之外的参数
【解决方案2】:

致任何来这里寻找答案的人:

我最终覆盖了 OAuth2TokenEndpointFilter。它有一个身份验证成功处理程序,可以注入它来执行任何额外的令牌响应操作。例如:

 Map<String, Object> additionalParameters = accessTokenAuthentication.getAdditionalParameters();
        if(additionalParameters.size()==0)
            additionalParameters=new HashMap<>();
     additionalParameters.put("hi","hi");

【讨论】:

    【解决方案3】:

    这个类和方法可能对你有帮助。你可以找到类的初始位置

    【讨论】:

    猜你喜欢
    • 2020-03-24
    • 1970-01-01
    • 2019-12-01
    • 2022-10-23
    • 2019-06-16
    • 2022-11-04
    • 2020-06-27
    • 2021-11-23
    • 2019-05-27
    相关资源
    最近更新 更多