带有Angular和反应式Spring Security的OAuth2

时间:2019-06-12 22:25:32

标签: angular typescript oauth-2.0 spring-security-oauth2 spring-webflux

我正在尝试为我的Angular应用和Spring Webflux后端使用VK进行社交登录。目前,我在后端有一个端点可以提供用户信息: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标头,从而导致该机制失败。

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

同时,我觉得我的方法可能是错误的,整个身份验证过程应该在后端进行,而前端应该只获得一个cookie,但是我无法弄清楚如何重定向AJAX请求从前端到VK登录页面,在后端进行处理,然后返回Angular应用。

1 个答案:

答案 0 :(得分:3)

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

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

希望有帮助!