使用Spring Boot OAuth2客户端登录后访问用户数据

时间:2019-06-03 12:44:07

标签: java spring spring-boot client spring-security-oauth2

我正在尝试使用Spring Boot来访问自定义API来构建OAuth2客户端。

到目前为止,这是我的代码:

@SpringBootApplication
public class MyClient {
    public static void main(String[] args){
        SpringApplication.run(MyClient.class, args);
    }
}
@Configuration
@EnableOAuth2Sso
public class ApplicationSecurity extends WebSecurityConfigurerAdapter{
    @Override
    protected void configure(HttpSecurity http) throws Exception{
        http.antMatcher("/**")
        .authorizeRequests().antMatchers("/","/callback","/login**","/error**")
        .permitAll().anyRequest().authenticated();
    }
}
@RestController
public class HomeController {
    @RequestMapping("/user")
    public String login() {
        String userInfoJson = "get data returned from API somehow";
        return userInfoJson;
    }

    @RequestMapping("/callback")
    public void callback(HttpServletResponse response) {
        response.sendRedirect("/user");
    }
}

我已经创建了一个具有所有所需属性的application.yml文件,并且登录过程可以正常运行,成功登录后将流返回到/ callback。

那时候我应该已经收到一个令牌,可以用来从服务器获取用户数据。

如何访问此令牌?

此外,spring boot是否有任何类可以自动执行令牌验证过程,还是必须手动创建请求?

谢谢

1 个答案:

答案 0 :(得分:0)

来自文档

  

OAuth2客户端可用于从提供者获取用户详细信息(如果可用的功能),然后将其转换为Spring Security的身份验证令牌。

     

以上资源服务器通过user-info-uri属性支持此操作。这是基于OAuth2的单点登录(SSO)协议的基础,Spring Boot通过提供注释@ EnableOAuth2Sso使其易于参与。

     

上面的Github客户端可以通过添加该注释并声明在何处找到该端点,来保护其所有资源并使用Gi​​thub / user /端点进行身份验证(除了上面已经列出的security.oauth2.client。*配置之外) :

application.yml。

security:
    oauth2:
...
    resource:
        userInfoUri: https://api.github.com/user
        preferTokenInfo: false

如您所见,如果您设置了从中获取用户信息的位置,然后将其填充,则应该自动完成此操作。

填充身份验证令牌后,您可以通过多种不同方式从安全上下文中获取此令牌。

@RequestMapping("/callback")
public void callback(Authentication authentication) {
    final String name = authentication.getName();
    response.sendRedirect("/user");
}

如果您想访问原始json,则可能必须使其余部分自己调用。如果要将自定义值添加到身份验证对象,则必须实现自己的UserDetails类。