Spring oauth2,使用访问令牌检索用户数据?

Posted

技术标签:

【中文标题】Spring oauth2,使用访问令牌检索用户数据?【英文标题】:Spring oauth2, Use access token to retrieve user data? 【发布时间】:2018-07-03 00:21:27 【问题描述】:

我正在使用spring security oauth2authorization_code 类型。

Oauth2 客户端成功为用户检索到access_token

现在,客户端需要使用access_token 检索电子邮件等用户信息。

但是我找不到教程,示例来说明我如何做到这一点..

【问题讨论】:

您使用的是哪种类型的令牌?智威汤逊??您可以实现自己的 TokenEnhancer 以将自定义数据添加到该令牌。 您通常可以在introspection endpoint 获取有关访问令牌的元数据。 oauth2 在 oauth/check_token 暴露了另一个端点。 【参考方案1】:

你有两个选择。

    通过添加额外声明在令牌响应中添加用户信息,请参阅can I include user information while issuing an access token? 实现用户信息端点

@RestController
@ProcessingController
@RequestMapping("/identity/userinfo")
public class UserInfoController 

    @RequestMapping(value = "", method = RequestMethod.GET)
    public ResponseEntity<?> userInfo(Principal principal,
                                      HttpServletRequest request) 
        return ResponseEntity.ok(principal);
    


并确保您有一个配置为在该端点使用 oauth2 的 resourceServer

@Configuration
public class ResourceServerConfig 

    @Autowired
    private ResourceServerTokenServices defaultTokenServices;

    @Bean
    protected ResourceServerConfiguration identityResources() 

        ResourceServerConfiguration resource = new ResourceServerConfiguration() 
            // Switch off the Spring Boot @Autowired configurers
            public void setConfigurers(List<ResourceServerConfigurer> configurers) 
                super.setConfigurers(configurers);
            
        ;

        resource.setConfigurers(Arrays.asList(new ResourceServerConfigurerAdapter() 

            @Override
            public void configure(ResourceServerSecurityConfigurer resources) throws Exception 
                resources.resourceId(ResourceId.IDENTITY_API.getName())
                        .tokenServices(defaultTokenServices);
            

            @Override
            public void configure(HttpSecurity http) throws Exception 
                http
                        .requestMatchers()
                        .antMatchers("/identity/**")
                        .and()
                        .authorizeRequests()
                        .antMatchers("/identity/userinfo/**").hasAnyAuthority("ROLE_USER_INFO")
                        .anyRequest().authenticated();
            
        ));
        resource.setOrder(3);
        return resource;
    


【讨论】:

以上是关于Spring oauth2,使用访问令牌检索用户数据?的主要内容,如果未能解决你的问题,请参考以下文章

使用 spring-boot-starter-oauth2-client 检索 OAuth2 3-legged 身份验证的访问令牌

如何使用代码授权流在 Spring 应用程序中提取 Oauth2 访问令牌?

Spring Boot OAuth2:如何检索用户令牌信息详细信息

Spring Security + Google OAuth2 登录:访问令牌为空?

使用OAuth2和匿名访问的Spring Security

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