我有以下堆栈 - Angular 2,Net Core 2.1和我正在使用Identity。我想添加Google身份验证选项,并发现使用客户端gapi库的一些限制 - 如果不允许第三方Cookie,主要的一个是不行。
这导致我尝试在服务器端实施Google身份验证。从Angular向我的externallogin端点发起http请求会导致CORS问题,如as seen here和here所示。我可以通过直接使用我的externallogin端点或使用document.location.href的Angular成功通过Google进行身份验证。使用document.location.href似乎是 - 实现它的错误方法。我已经与Net Core和Angular合作了很长一段时间,但这个让我很难过。有没有一种有效的方法来实现这一点,或者我将自己设计成一个黑暗的角落,并被迫使用document.location.href?
当请求来自Angular http get请求时,我不确定在我的后端验证Challenge之后我是否能够正确处理重定向。
您正在寻找OAuth2规范的授权代码授权流程
+----------+
| 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)
以下是合乎逻辑的步骤
这是你需要注意的地方。
现在,您希望处理来自Google身份验证的重定向,在显示您的Angular应用之前,您向Google身份验证服务器发出另一个请求访问令牌的请求,您可以通过提供授权代码来执行此操作。 (反向信道)
现在,您在服务器端拥有访问令牌,这将覆盖身份验证位,如果您需要使用此身份验证令牌访问受保护的API,则需要覆盖该身份验证令牌。
如何判断用户是否经过身份验证?你需要一个id令牌。
这是由OpenIdConnect完成的
这只是OAuth2上的一个层,除了返回您的访问令牌之外,它还将返回一个id令牌,可用于对用户进行身份验证。
基本上你想要的是在dotnet核心中设置一些路由,它将在你的角度应用之外工作,它将处理反向信道通信。另请阅读this google guide。