我正在尝试使用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是否有任何类可以自动执行令牌验证过程,还是必须手动创建请求?
谢谢
答案 0 :(得分:0)
来自文档
OAuth2客户端可用于从提供者获取用户详细信息(如果可用的功能),然后将其转换为Spring Security的身份验证令牌。
以上资源服务器通过user-info-uri属性支持此操作。这是基于OAuth2的单点登录(SSO)协议的基础,Spring Boot通过提供注释@ EnableOAuth2Sso使其易于参与。
上面的Github客户端可以通过添加该注释并声明在何处找到该端点,来保护其所有资源并使用Github / 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
类。