如何向Spring oauth2访问令牌添加内容?

时间:2014-09-20 20:05:24

标签: spring spring-security oauth-2.0 spring-security-oauth2

如果我正确理解了oauth2规范,我应该能够将自定义内容(如user_id)添加到oauth2访问令牌中。然后,服务器可以解码访问令牌并将用户域对象添加到SecurityContextHolder。

(当然我可以将user_id添加到每个REST API方法,但这意味着需要进行大量的重构)

现在阅读手册我认为我需要实现或扩展TokenEnhancer。因为我使用的是javascript客户端 我应该扩展JwtAccessTokenConverter?我在正确的道路上吗?

2 个答案:

答案 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;
        }
    };
}