Spring OAuth2 - 创建访问令牌

Posted

技术标签:

【中文标题】Spring OAuth2 - 创建访问令牌【英文标题】:Spring OAuth2 - Create an access token 【发布时间】:2015-04-12 23:07:49 【问题描述】:

我正在使用此处描述的方法来创建 OAuth2 访问令牌:

Spring OAuth2 - Manually creating an access token in the token store

此方法适用于 spring-security-oauth2 1.0.5.RELEASE,但不适用于 spring-security-oauth2 2.0.6.RELEASE。

有没有办法用 spring-security-oauth2 2.0.6.RELEASE 做同样的事情?

【问题讨论】:

【参考方案1】:

这里是使用 spring-security-oauth2 2.0.6.RELEASE 的示例 Rest Controller 方法

@RequestMapping("/token")
public OAuth2AccessToken token(Principal principal) 
    Set<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();
    authorities.add(new SimpleGrantedAuthority("ROLE_USER"));

    Map<String, String> requestParameters = new HashMap<>();
    String clientId = "acme";
    boolean approved = true;
    Set<String> scope = new HashSet<>();
    scope.add("scope");
    Set<String> resourceIds = new HashSet<>();
    Set<String> responseTypes = new HashSet<>();
    responseTypes.add("code");
    Map<String, Serializable> extensionProperties = new HashMap<>();

    OAuth2Request oAuth2Request = new OAuth2Request(requestParameters, clientId,
            authorities, approved, scope,
            resourceIds, null, responseTypes, extensionProperties);


    User userPrincipal = new User(principal.getName(), "", true, true, true, true, authorities);

    UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userPrincipal, null, authorities);
    OAuth2Authentication auth = new OAuth2Authentication(oAuth2Request, authenticationToken);
    OAuth2AccessToken token = defaultTokenServices.createAccessToken(auth);
    return token;

希望对你有帮助。

【讨论】:

对于那些追随我的人:你需要自己连接你的 defaultTokenServices,注入它会连接错误的实例。 DefaultTokenServices service = new DefaultTokenServices(); OAuth2AccessToken 令牌 = service.createAccessToken(auth); InMemoryTokenStore inMemoryTokenStore = new InMemoryTokenStore(); service.setTokenStore(inMemoryTokenStore); /* 你可能想让 inMemoryTokenStore 成为最终的静态或类似的作用域 */(添加到 Kumaresan 加法)

以上是关于Spring OAuth2 - 创建访问令牌的主要内容,如果未能解决你的问题,请参考以下文章

带有 Spring Boot REST 应用程序的 OAuth2 - 无法使用令牌访问资源

Spring Oauth2无效的访问令牌

Spring以编程方式生成oauth2访问令牌

Spring 5,401 返回后带有 Google 刷新访问令牌的 OAuth2

使用 Spring Oauth2 缓存访问令牌

使用 Spring Oauth2 缓存访问令牌