spring oauth2怎么获取当前用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring oauth2怎么获取当前用户相关的知识,希望对你有一定的参考价值。

参考技术A 数据库保存你最后获取到的access_token就可以了 参考技术B 授权后在在任意controller中配置:
@RequestMapping(value = "/user", method = RequestMethod.GET)
@ResponseBody
public Object currentUserName(Principal principal)
return principal;

spring 5 - Oauth2服务器获得当前用户

我使用spring 5构建了一个Spring boot oauth2服务器.oauth服务器工作正常,我可以使用基本的auth和用户名/密码登录。我得到一个不记名令牌,我可以使用/ oauth / check_token网址验证令牌。

在同一个Spring启动项目中,我想添加一个端点,该端点将打印出经过身份验证的用户信息,以便oauth2客户端可以通过登录用户获取信息。我创建了一个端点/用户,它看起来像这样:

@GetMapping("/user")
@ResponseBody
public Principal user(Principal user) {
    return user;
}

我启动postman以便我可以执行api调用,例如,调用/ oauth / token,我收到一个令牌。然后,我开始一个新请求,将身份验证方法设置为承载令牌并填写收到的承载令牌。我对url(http://localhost:8080/user)进行GET调用,结果证明校长始终为null。我知道因为我可以在Spring工具套件中调试我的应用程序而且Principal总是空的。我也尝试过:

OAuth2Authentication oAuth2Authentication = (OAuth2Authentication)SecurityContextHolder.getContext() .getAuthentication();

那也是空的。如何创建将打印用户信息的端点,以便客户端可以设置userInfoUri属性。

答案

我有答案。我会在这里发布,以防其他人遇到这个问题。

我有一个ResourceServerConfigurerAdapter,其中包含以下配置:

public void configure(HttpSecurity http) throws Exception {
    http.anonymous()
        .disable()
        .requestMatchers()
        .antMatchers("/api/user/**").and().authorizeRequests()
        .antMatchers("/user").authenticated()
        // More rules here

它因为第一个antMatchers(“/ api / user / **”)而无法工作的原因。我改成了这个:

http.anonymous()
    .disable()
    .requestMatchers()
    .antMatchers("**").and().authorizeRequests()

我相信第一个antMatchers决定了它强制授权请求的路径(在该路径中启用oauth2安全性),所以如果第一个路径是.antMatchers(“/ api / user / **”)之后是.antMatchers(“/ user) “)然后它将不匹配,并且/ user url将不会启用oauth2安全性。

以上是关于spring oauth2怎么获取当前用户的主要内容,如果未能解决你的问题,请参考以下文章

如何在spring security oauth2授权服务器中通过jwt令牌获取用户信息?

Spring Security +Oauth2 +Spring boot 动态定义权限

Spring security oauth2 - 从 OAuth2 主体获取自定义数据

Spring Security OAUTH2 使用用户名/密码获取令牌

Spring Cloud云架构 - SSO单点登录之OAuth2.0 根据token获取用户信息

oauth2 spring security with spring session 使那些不活动 30 分钟的用户无效