繁体   English   中英

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

[英]Access user data after login with Spring Boot OAuth2 Client

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

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

@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是否有自动执行令牌验证过程的任何类,或者我是否必须手动创建请求?

谢谢

来自文档

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

上面的Resource Server通过user-info-uri属性支持这一点。这是基于OAuth2的单点登录(SSO)协议的基础,Spring Boot通过提供注释@EnableOuth2Sso使其易于参与。

上面的Github客户端可以保护其所有资源并使用Gi​​thub / user / endpoint进行身份验证,方法是添加该注释并声明在哪里找到端点(除了上面已经列出的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类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM