我一直在浏览this tutorial,其中展示了如何使用从简单到我们自己的授权服务器的几种方案来保护单页面应用程序,该授权服务器将身份验证委派给提供者。第一个方案使用Authorization Code Grant来记录用户。
假设在这种情况下我们用自己的OAuth服务器替换Facebook的OAuth服务器,并将其配置为返回JWT令牌。
如果SPA想要使用JWT令牌通过在资源服务器之间进行负载均衡的边缘服务器来保护请求,那么SPA应该使用哪个OAuth流?
如果我们想在春天使用JWT令牌替换默认的JSESSION和CSRF支持,那么如何配置spring boot / spring安全性呢? IIUC JWT令牌可以用来替代这两个功能。
根据Manish的回答假设我们使用OAuth 2隐式流程,我们:
因此,一旦完成此操作,POST请求是安全的,假设每个请求都包含JWT令牌作为承载头,或者我们是否还需要配置CSRF?
答案 0 :(得分:2)
这取决于您的应用程序对安全性的敏感程度,但建议公共客户端(SPA)使用隐式流。
教程基于授权代码流程,如果您将用您的STS替换Facebook,它仍将使用授权代码流,因为@ EnableOAuth2Sso将JWT令牌存储在服务器上并将cookie发送到浏览器,它还使用刷新令牌来获取新的JWT令牌。它是使用基于API网关模式的公共客户端(SPA)实现授权代码流的自定义流程。
实现隐式流 - 不要在服务器端使用@ EnableOAuth2Sso,只需公开REST API并使用@EnableResourceServer保护它。并且您需要使用oidc-client来实现隐式流链接https://github.com/IdentityModel/oidc-client-js
仅当您将JWT令牌或会话标识符存储在浏览器的cookie中时,才需要CSRF保护。