【发布时间】:2020-03-26 11:29:20
【问题描述】:
下面是我们应用的架构。
- Web 界面 [客户端] 是独立的 Angular 2 应用程序 [domain.com]
- 持有客户端凭据的[proxy][web interface secret] [domain2.com]
- [API] 本身具有身份验证服务器 [domain3.com]
申请流程如下:
- 用户将他的凭据用户名+密码输入到[客户端]登录页面,然后将其发送到[代理]。
- 然后代理会将凭据附加到请求并将其转发到 [API]。
- [API]将能够在验证用户凭据后获取访问+刷新令牌并将其返回给[代理]
- [proxy] 返回响应以及标头 [Set-Cookie:XSRF-TOKEN]
- [client] 应该能够读取 [XSRF-TOKEN] 并将其与每个请求一起发送为 [X-XSRF-TOKEN]标题。
除了第 5 步之外,身份验证服务器、代理和客户端上的一切都按预期工作:
Angular 应该能够根据文档自动处理此问题
{ provide: XSRFStrategy, useValue: new CookieXSRFStrategy('XSRF-TOKEN', 'X-CSRF-TOKEN')}
angular 将能够获取 [XSRF-TOKEN] cookie 的值并在每个请求中创建 [X-CSRF-TOKEN] 标头我们通过应用程序制作的。
虽然 & 当我使用不同的来源构建架构时,angular 无法从另一个来源读取 cookie。
我面临的这种方法的问题是,由于服务器位于不同的域中,我无法通过 XSRFStrategy 提供程序读取 cookie。有没有办法读取那个 cookie 的值?
如果不是,那么当前架构是错误的,我需要在同一域中构建 [client] 和 [proxy],我避免使用这种方法,因为我需要将表示层与任何后端代码分开。
那么,我的问题是如何针对这种情况实施 csrf 保护?
【问题讨论】:
标签: angular laravel cross-domain csrf