如果我正确理解了oauth2规范,我应该能够将自定义内容(如user_id)添加到oauth2访问令牌中。然后,服务器可以解码访问令牌并将用户域对象添加到SecurityContextHolder。
(当然我可以将user_id添加到每个REST API方法,但这意味着需要进行大量的重构)
现在阅读手册我认为我需要实现或扩展TokenEnhancer。因为我使用的是javascript客户端 我应该扩展JwtAccessTokenConverter?我在正确的道路上吗?
答案 0 :(得分:1)
首先,为什么您需要向Access令牌添加userId,同时可以将数据存储在Scope或additional_information中,让我来描述使用范围:
如果您的客户端需要使用访问令牌获取特定数据,您可以将其作为范围参数发送给Auth服务器,然后在重定向访问toke重定向URL时,您将获得放入范围参数的数据,这用于存储统计信息您的用户在身份验证之前和之后。
如果您希望此用户ID为其他内容而不是存储状态,我建议在Auth服务器上创建端点以提供用户详细信息并使用带有Access令牌的OAuth保护它。
我不建议将任何数据放入生成Access令牌,因为它可能会削弱令牌的复杂性,也不建议在客户端解码令牌。
答案 1 :(得分:0)
_updateList (doneCallback: () => void) {
this.rows = this.service.get();
doneCallback();
}
并在AuthorizationServerConfiguration:
@Bean
public TokenEnhancer tokenEnhancer() {
return new TokenEnhancer() {
@Override
public OAuth2AccessToken enhance(OAuth2AccessToken oAuth2AccessToken, OAuth2Authentication oAuth2Authentication) {
DefaultOAuth2AccessToken newToken = new DefaultOAuth2AccessToken(oAuth2AccessToken);
Map<String, Object> addInfo = new HashMap<>();
// add here what u need
addInfo.put("putName", oAuth2Authentication.getName());
newToken.setAdditionalInformation(addInfo);
return newToken;
}
};
}