OAuth2 Angular 和反应式 Spring 安全

OAuth2 with Angular and reactive Spring Security

我正在尝试使用 VK 为我的 Angular 应用程序和 Spring Webflux 后端实施社交登录。目前我在后端有一个端点来提供用户信息:localhost:8080/people/me。我尝试通过以下方式在前端对用户进行身份验证:

ngOnInit(): void {
    this.http.get(USER_INFO_URL)
      .subscribe((resp: Response) => {
        if (resp.status < 300) {
          this.authenticated = true;
          resp.json()
            .then(vkUser => {
              let fields: [string, string] = ['firstName', vkUser.firstName];
              fields['lastName'] = vkUser.lastName;
              this.user = new User(vkUser.id, fields);
            });
        } else {
          window.location.href = AUTH_URL;
        }
      });
  }

但是,当我的 Spring 应用程序将客户端重定向到 VK 进行身份验证时,VK 没有提供任何 CORS headers,导致机制失败。

有人可以推荐一种将 OAuth2 用于 Angular/Spring 对的方法吗?我正在使用 code 流程,所以我想首先我需要在前端获取代码,然后将其发送到 Spring 后端,以便它更改访问令牌。

同时,我觉得我的做法可能是错误的,整个auth过程应该在后端进行,而前端应该只得到一个cookie,但我不知道如何重定向AJAX 从前端到 VK 登录页面的请求,在后端处理,然后 return 到 Angular app.

如果不配置某些第三方软件(这将启用来自您网站的跨源请求)或向您的应用程序添加服务器端 API 代码以完成登录过程,这是不可能的。

正如我们在评论中所做的那样,您已经成功地在几个请求周期内完成了登录流程。您可以使用相同的流程来获取有效会话,然后重定向到您的单页应用程序。该 cookie 应设置为仅 HTTP cookie(以防止其他 JavaScript 劫持它),但这将允许您向您的服务器发出请求,而无需成功添加额外的身份验证参数。当您为 API 请求提供服务时,您将必须检查该 cookie,并编写处理代码,在 cookie 不存在或不再有效时提示用户登录。

希望对您有所帮助!