Spring 授权服务器自定义访问令牌响应以添加额外的参数
Spring Authorization server customizing the access token response to add additional params
我正在实施 spring 授权服务器,我想向令牌响应添加一些自定义属性 json。以下是我希望的响应方式。
{
"access_token": *jwt*,
"scope": "articles.read openid",
"token_type": "Bearer",
"expires_in": 299,
***"customvalue1":99***
}
我在 stack overflow 中看到过多个帖子,其中讨论了类似的主题,但在这些情况下,附加数据被添加到 jwt 的声明或 header 中。我的要求是将它添加到 jwt 之外。
我试图实现 OAuth2TokenCustomizer,但这只允许修改 jwt 的声明或 headers。有人可以帮忙吗?
这个 class 和方法可能会帮助 you.You 找到 class 初始位置
如果您正在使用新的授权服务器,那么创建这个 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
的副本
致所有来这里寻找答案的人:
我最终覆盖了 OAuth2TokenEndpointFilter。它有一个身份验证成功处理器,可以注入它来执行任何额外的令牌响应操作。例如:
Map<String, Object> additionalParameters = accessTokenAuthentication.getAdditionalParameters();
if(additionalParameters.size()==0)
additionalParameters=new HashMap<>();
additionalParameters.put("hi","hi");
我正在实施 spring 授权服务器,我想向令牌响应添加一些自定义属性 json。以下是我希望的响应方式。
{
"access_token": *jwt*,
"scope": "articles.read openid",
"token_type": "Bearer",
"expires_in": 299,
***"customvalue1":99***
}
我在 stack overflow 中看到过多个帖子,其中讨论了类似的主题,但在这些情况下,附加数据被添加到 jwt 的声明或 header 中。我的要求是将它添加到 jwt 之外。 我试图实现 OAuth2TokenCustomizer,但这只允许修改 jwt 的声明或 headers。有人可以帮忙吗?
这个 class 和方法可能会帮助 you.You 找到 class 初始位置
如果您正在使用新的授权服务器,那么创建这个 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
的副本致所有来这里寻找答案的人:
我最终覆盖了 OAuth2TokenEndpointFilter。它有一个身份验证成功处理器,可以注入它来执行任何额外的令牌响应操作。例如:
Map<String, Object> additionalParameters = accessTokenAuthentication.getAdditionalParameters();
if(additionalParameters.size()==0)
additionalParameters=new HashMap<>();
additionalParameters.put("hi","hi");