【发布时间】:2021-08-17 12:21:02
【问题描述】:
我正在从其官方网站上阅读 Angular (https://blog.angular-university.io/angular-jwt-authentication/) 的博客,其中使用单独的服务器进行身份验证,并使用不同的服务器进行应用程序。因此,在这种情况下,cookie 将由身份验证服务器发出,但将在应用程序服务器中使用。这怎么可能?我无法理解该博客的以下解释:
Cookie 和第三方身份验证提供商
在 cookie 中接收会话 JWT 的一个潜在问题是我们无法从处理身份验证逻辑的第三方 Web 域接收它。
这是因为在
app.example.com上运行的应用程序无法访问来自另一个域(如security-provider.com)的 cookie。因此,在这种情况下,我们将无法访问包含 JWT 的 cookie,并将其发送到我们的服务器进行验证,从而无法使用 cookie。
我们能否充分利用这两种解决方案?
第三方身份验证提供商可能允许我们在我们网站的可配置子域中运行外部托管的登录页面,例如
login.example.com。因此,将所有这些解决方案结合起来是可能的。以下是解决方案的样子:
- 在我们自己的子域 login.example.com 上运行的外部托管登录页面,以及在 example.com 上运行的应用程序
- 该页面设置了一个仅包含 JWT 的 HTTP Only 和 Secure Cookie,从而为我们提供了很好的保护,可以抵御多种依赖窃取用户身份的 XSS 攻击
- 此外,我们还需要添加一些 XSRF 防御,但对此有很好理解的解决方案。
请有人解释以下行:
第三方身份验证提供商可能允许我们在我们网站的可配置子域中运行外部托管的登录页面,例如 login.example.com。
这是什么意思,我们如何在认证服务器上实现它,我们如何在应用服务器中访问认证服务器发出的cookie。 请澄清这是否意味着在身份验证服务器发出的cookie中将域字段设置为应用程序服务器,或者是其他的。
Set-Cookie: <cookie-name>=<cookie-value>; Domain=<domain-value>; Secure; HttpOnly
此外,如果是这种情况,应用服务器如何验证身份验证服务器提供的 cookie。身份验证服务器是否也将此 cookie 发送到应用程序服务器?我们是否也必须建立这种机制?
【问题讨论】:
-
我向你推荐这个视频,它让我节省了一些时间:youtube.com/watch?v=996OiexHze0
标签: angular session-cookies csrf setcookie third-party-cookies