【问题标题】:OAuth2 with Angular and reactive Spring Security带有 Angular 和响应式 Spring Security 的 OAuth2
【发布时间】:2019-10-27 11:52:36
【问题描述】:

我正在尝试使用 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 标头,导致该机制失败。

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

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

【问题讨论】:

  • vk 是否提供 oauth api?完成 oauth 流程需要一些后端工作,或配置第三方系统,如 fire base,以向您正在使用的 vk 身份验证服务发出请求。
  • @Maus 确实如此,如果我尝试直接从浏览器访问我的后端端点,它会完美运行。它将我重定向到 VK,我授予权限,Spring 成功授权我
  • 您可以执行相同的流程,然后使用您的会话 cookie 设置重定向回您的应用程序吗?
  • @Maus 所以你的意思是有一个重定向 uri 设置为后端资源并强制用户首先访问后端应用程序,然后将他们重定向到带有 cookie 的前端?
  • 这似乎可行。考虑到您的网站要求,这是否可以接受?

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


【解决方案1】:

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

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

希望有帮助!

【讨论】:

  • 最后一个问题:你知道在 Spring 中是否有标准的方法可以做到这一点,还是我需要在这里发明一个轮子?
  • 在您的问题中,您所说的“那个”指的是什么?
  • 使用 OAuth2 完成身份验证后,自动将请求重定向到带有 Set-Cookie 标头的特定地址。还是我需要一个自定义控制器并手动实现这个逻辑?
  • 对我来说似乎很简单——无论是什么视图都将人们路由到身份验证系统,检查用户是否有有效的会话,然后以 302 响应将他们发送到您的应用程序。
  • 我假设 spring 当前正在发生什么,而您的身份验证系统会导致该 cookie 被设置。我不会自己实现,但在 spring 中寻找会话实用程序,因为您还需要能够使 cookie 无效,并且它涉及加密。
猜你喜欢
  • 2017-10-02
  • 1970-01-01
  • 2015-07-15
  • 2015-11-23
  • 2020-06-20
  • 2016-04-04
  • 2018-06-27
  • 2017-12-16
  • 2020-08-31
相关资源
最近更新 更多