我正在使用Spring实现Oauth2身份验证服务器。认证后,我需要生成一个JWToken,其中包含一些额外的信息。
我有一个 AuthorizationServerConfigurerAdapter 配置:
@Configuration
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
//extra code omitted
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("angular")
.secret(passwordEncoder().encode("the_secret"))
.autoApprove(true)
.scopes("")
.authorizedGrantTypes("implicit", "password", "refresh_token")
.redirectUris("http://localhost:4200");
}
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
endpoints.authenticationManager(manager)
.accessTokenConverter(new CustomJwtTokenEnchancer())
.tokenStore(tokenStore());
}
}
我的 CustomJwtTokenEnhancer 将添加有关用户个人资料的一些信息:
public class CustomJwtTokenEnhancer extends JwtAccessTokenConverter {
//extra code omitted
@Override
public OAuth2AccessToken enhance(
OAuth2AccessToken accessToken,
OAuth2Authentication auth) {
final Map<String, Object> additionalInfo = new HashMap<>();
additionalInfo.put("profiles", authService.getProfiles(auth.getName()));
additionalInfo.put("activeProfile", authService.getActiveProfile(auth.getName()));
((DefaultOAuth2AccessToken) accessToken).setAdditionalInformation(additionalInfo);
return super.enhance(accessToken, authentication);
}
}
可以生成令牌,但重定向URI将所有其他信息作为参数:
localhost:4200/#access_token={token}&token_type=bearer&expires_in=21599&scope=&profiles=%5B200022032,%201786154,%201616954,%201666754%5D&activeProfile=1666754&jti=e0677289-94a5-47da-a00e-b63c3d4c0598
这是一个问题,因为某些用户有很多配置文件,并且由于这些情况,我需要增加max-http-header-size。
由于它是重复信息,所以我真的想从URI中忽略它。有什么办法可以实现?