假设我们有一个单页应用程序(SPA)在nginx上被服务,在域名example.com,REST API托管在api.example.com。SPA和API之间的身份验证是通过JWT进行的。短期(15分钟)的访问令牌存储在SPA中的localstorage中,而长期(数天)的刷新令牌则由服务器设置在 HttpOnly cookie 中。CORS被允许在域名example.com上。
问题1:我昨天与同事讨论了这个问题,他们认为因为我的刷新令牌驻留在Cookie中,所以我需要为我的应用程序提供CSRF保护。但我认为这是不正确的,因为刷新令牌不能用于“访问”任何私有资源,并且只能在特定端点的GET请求期间由服务器进行检查,该端点将令牌交换机制公开给SPA。
Q1: 这种推理正确吗? HttpOnly cookie 中的刷新令牌是否存在被恶意利用的风险?
问题2:进一步思考后,即使我们要为某些CSRF保护做些准备,如果出于平静的目的,您会如何首先向客户端发送令牌?我们不使用表单并完全在客户端渲染UI,因此隐藏字段是不可能的,索引文件由nginx提供,因此我们也无法在HTML中嵌入meta标签。
Q2: 是否有办法使CSRF保护适用于单页应用程序?
问题1:我昨天与同事讨论了这个问题,他们认为因为我的刷新令牌驻留在Cookie中,所以我需要为我的应用程序提供CSRF保护。但我认为这是不正确的,因为刷新令牌不能用于“访问”任何私有资源,并且只能在特定端点的GET请求期间由服务器进行检查,该端点将令牌交换机制公开给SPA。
Q1: 这种推理正确吗? HttpOnly cookie 中的刷新令牌是否存在被恶意利用的风险?
问题2:进一步思考后,即使我们要为某些CSRF保护做些准备,如果出于平静的目的,您会如何首先向客户端发送令牌?我们不使用表单并完全在客户端渲染UI,因此隐藏字段是不可能的,索引文件由nginx提供,因此我们也无法在HTML中嵌入meta标签。
Q2: 是否有办法使CSRF保护适用于单页应用程序?