我正在从其官方网站阅读 Angular 的博客(https://blog.angular-university.io/angular-jwt-authentication/ ),其中使用单独的服务器进行身份验证,而应用程序使用不同的服务器。因此,在这种情况下,cookie 将由身份验证服务器发出,但将在应用程序服务器中使用。这怎么可能?我无法从该博客中理解以下解释:
Cookie 和第三方身份验证提供程序
在 cookie 中接收会话 JWT 的一个潜在问题是我们无法从处理身份验证逻辑的第三方 Web 域接收它。
这是因为在其上运行的应用程序
app.example.com
无法访问来自另一个域(如security-provider.com
.因此,在这种情况下,我们将无法访问包含 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 发送到应用程序服务器?我们是否也必须建立这种机制?