我计划创建一个单页web应用程序,所有用户身份验证将由AWS Cognito处理。通过阅读一些文章,他们都建议使用"代码"。授予流+ PKCE而不是隐式流,因为隐式流在OAuth 2.1中已弃用
我用AWS Cognito创建了一个测试用户池,通过使用Postman,我成功地获得了access_token, id令牌和刷新令牌与代码授予流+ PKCE。
我用AWS Cognito Doc仔细检查了一下,如果使用代码授权流,似乎总是会返回刷新令牌,而且我找不到AWS控制台的任何地方来禁用返回刷新令牌。只是想知道如何保护refresh_token?Cookie或localStorage不能阻止XSS
通常通过后端路由令牌请求,例如实用程序API,它也将刷新令牌表示为HTTP Only SameSite=strict encrypted secure cookie
。有关示例,请参阅此加密代码。
除了PKCE之外,后端组件还允许您使用客户端秘密,这可以略微提高安全性。Cognito支持这一点,所以我建议两者都使用。
基于浏览器的应用程序的OAuth建议使用这种方法。利益相关者通常希望你使用前端描述的后端,如果你必须解释你的应用程序的安全性,这会让生活更舒适。
XSS
使用上面的HTTP cookie方法,恶意代码将无法窃取您的刷新令牌,因此这是推荐的处理它们的方法。
如果您的SPA有XSS漏洞,那么恶意代码可能能够窃取您的数据,无论是否使用令牌或cookie来访问数据。因此,无论您的OAuth解决方案是什么,仔细实现XSS保护都是至关重要的。