spring-security Spring授权服务器自定义访问令牌响应以添加其他参数

gg0vcinb  于 2022-11-11  发布在  Spring
关注(0)|答案(3)|浏览(165)

我正在实现spring授权服务器,我想给token response json添加一些自定义属性。下面是我希望得到的响应。

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

我在stack overflow中看到过多个帖子,其中讨论了类似的主题,但在这些情况下,额外的数据被添加到jwt的声明或头中。我的要求是将其添加到jwt之外。我试图实现OAuth2TokenCustomizer,但这只允许修改jwt的声明或头。有人能帮忙吗?

olhwl3o2

olhwl3o21#

对任何来这里寻找答案的人:
我最终重写了OAuth2TokenEndpointFilter。它有一个身份验证成功处理程序,可以注入该程序以执行任何其他令牌响应操作。例如:

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

kr98yfug2#

如果你正在使用新的授权服务器,那么创建这个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的副本

bfnvny8b

bfnvny8b3#

这个类和方法可能对你有帮助。你可以在init地方找到这个类

相关问题