使用Net Core 2.1和Angular 2创建使用Google选项登录时出现问题

问题描述 投票:0回答:1

我有以下堆栈 - Angular 2,Net Core 2.1和我正在使用Identity。我想添加Google身份验证选项,并发现使用客户端gapi库的一些限制 - 如果不允许第三方Cookie,主要的一个是不行。

这导致我尝试在服务器端实施Google身份验证。从Angular向我的externallogin端点发起http请求会导致CORS问题,如as seen herehere所示。我可以通过直接使用我的externallogin端点或使用document.location.href的Angular成功通过Google进行身份验证。使用document.location.href似乎是 - 实现它的错误方法。我已经与Net Core和Angular合作了很长一段时间,但这个让我很难过。有没有一种有效的方法来实现这一点,或者我将自己设计成一个黑暗的角落,并被迫使用document.location.href?

  1. 我已在Google API控制台上正确设置了授权的Javascript Origin和授权重定向URI。
  2. 我在我的服务器上正确设置了COR
  3. Angular和Net Core(前端和后端)位于同一台服务器上。

当请求来自Angular http get请求时,我不确定在我的后端验证Challenge之后我是否能够正确处理重定向。

angular asp.net-core google-authentication
1个回答
0
投票

您正在寻找OAuth2规范的授权代码授权流程

看看this part of specification

 +----------+
 | Resource |
 |   Owner  |
 |          |
 +----------+
      ^
      |
     (B)
 +----|-----+          Client Identifier      +---------------+
 |         -+----(A)-- & Redirection URI ---->|               |
 |  User-   |                                 | Authorization |
 |  Agent  -+----(B)-- User authenticates --->|     Server    |
 |          |                                 |               |
 |         -+----(C)-- Authorization Code ---<|               |
 +-|----|---+                                 +---------------+
   |    |                                         ^      v
  (A)  (C)                                        |      |
   |    |                                         |      |
   ^    v                                         |      |
 +---------+                                      |      |
 |         |>---(D)-- Authorization Code ---------'      |
 |  Client |          & Redirection URI                  |
 |         |                                             |
 |         |<---(E)----- Access Token -------------------'
 +---------+       (w/ Optional Refresh Token)

以下是合乎逻辑的步骤

  1. 将用户重定向到Google页面进行身份验证,并将重定向网址返回到您的应用。 (A&B)

这是你需要注意的地方。

  1. 验证成功后,它会将您重定向回您的应用程序,并将提供步骤C中显示的授权码

现在,您希望处理来自Google身份验证的重定向,在显示您的Angular应用之前,您向Google身份验证服务器发出另一个请求访问令牌的请求,您可以通过提供授权代码来执行此操作。 (反向信道)

  1. 通过反向通道请求访问令牌并将其存储在服务器端的某个位置。 (D&E)

现在,您在服务器端拥有访问令牌,这将覆盖身份验证位,如果您需要使用此身份验证令牌访问受保护的API,则需要覆盖该身份验证令牌。

如何判断用户是否经过身份验证?你需要一个id令牌。

这是由OpenIdConnect完成的

这只是OAuth2上的一个层,除了返回您的访问令牌之外,它还将返回一个id令牌,可用于对用户进行身份验证。

基本上你想要的是在dotnet核心中设置一些路由,它将在你的角度应用之外工作,它将处理反向信道通信。另请阅读this google guide。

© www.soinside.com 2019 - 2024. All rights reserved.