我已经开发了REST API和两个JavaScript客户端(单页应用和本机应用-基于电子)。在这两个客户端中,我的用户都通过OAuth2流进行身份验证:
发送用户密码到服务器
获取access_token(以纯文本格式)和refresh_token(以httponly cookie格式)
当令牌过期时,它们正在刷新它,将请求发送到/ refresh端点(服务器从cookie读取refresh_token)
现在,我想实现csrf保护。所以我在后端(春季)实现了它:
@Override public void configure(HttpSecurity http) throws Exception { http.csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse()).and() .authorizeRequests().antMatchers("/", "/index.html", "/token/**").permitAll() .anyRequest().authenticated(); }
我的SPA完美运行,Angular从cookie读取XSRF-TOKEN并将其发送到X-XSRF-TOKEN标头中。电子应用程序出现问题。它无权访问Cookie(由于来源不同-电子在file://
url 上运行),因此无法设置X-XSRF-TOKEN标头。
我该如何处理?有什么方法可以使“跨域” cookie无效?或者,也许我可以通过电子魔术电子API以某种方式更改cookie的值(如果它可以访问文件系统,也许可以访问在计算机上创建的任何cookie)?