使用令牌的 Spring OAuth2 身份验证

Posted

技术标签:

【中文标题】使用令牌的 Spring OAuth2 身份验证【英文标题】:Spring OAuth2 authentication with token 【发布时间】:2021-05-12 23:07:58 【问题描述】:

我有这个 SpringBoot 应用程序,它通过 Google 使用 OAuth2 登录。而且它本身就可以正常工作。

但是,我正在尝试将它与我的 React 前端连接起来,因此:尝试开发代币交换。

安全配置

http.cors()
      .and()
      .authorizeRequests()
      .antMatchers(HttpMethod.GET, "/oauth/**")
      .authenticated()
      .anyRequest()
      .permitAll()
      .and()
      .oauth2Login();

现在,我通过这种方式获取令牌:

OAuth2AuthorizedClient client = authorizedClientService.loadAuthorizedClient(authentication.getAuthorizedClientRegistrationId(), authentication.getName());
String token = client.getAccessToken().getTokenValue();

并将其发送给我的 React 客户端。

问题是:如何在SpringBoot应用中接收和解释授权令牌? 现在,只要我附上 Authoriation 标头,它就会给我一个 CORS 问题...

【问题讨论】:

【参考方案1】:

您必须在 Spring Boot 应用程序中配置允许的 CORS 请求,或者从同一域为您的 react 前端提供服务。

我个人总是选择第二个选项,使用 Spring Boot 应用程序在某些 url 上提供反应包(例如 /static/js/)。

【讨论】:

不,没那么简单。我当然启用了 CORS... 是 OPTIONS 请求被阻止了吗? 禁用预检请求的安全性 - 例如***.com/a/26848692/5885758 伙计,我告诉你没那么简单!是谷歌端点阻止了我..

以上是关于使用令牌的 Spring OAuth2 身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Spring oauth2令牌请求中未实际使用的基本身份验证过滤器和身份验证入口点

使用Spring启动进行Oauth2身份验证

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

向 Google 进行身份验证时,从 Spring OAuth2 授权服务器发出 JWT 令牌

如何从 facebook/google/... oauth2 身份验证在 Spring (Boot) 中为单页应用程序派生自定义登录令牌?

Spring Oauth2:在 SecurityContext 中找不到身份验证对象