使用Oauth2有几种授权类型--然而我真的很困惑使用什么授权类型,因为所有授权类型似乎都有一些手动登录的主要安全问题。
我们的应用程序目前由两台服务器组成:
- 服务于react(SPA)前端的nginx服务器。此服务器无法访问资源,只有一个简单的/API端点重定向。
- 一个API/资源服务器,处理资源访问以及认证和授权。用nodejs编写。目前它是一个简单的会话cookie,在登录后创建,并以htmlonly cookie来回发送。
现在我研究了一些oauth2的例子,虽然这些例子展示了如何做事情,但它们似乎都不安全,完全无视xss或其他攻击。最重要的是,登录过程变得相当奇怪的用户体验流程。
最好的解决方案似乎是:“用于代码交换(PKCE)的具有证明密钥的授权代码流"。但是,documentation on pkce似乎没有指定生成访问令牌时会发生什么以及客户端(SPA应用程序)应如何处理它。
到目前为止,我看到的例子基本上是三个步骤:
1.重定向到执行oauth授权的服务器(以加载登录网页)
1.生成(通过所描述的步骤)访问令牌
1.使用作为URL一部分的访问令牌重定向回原始网站
第3步是我感到困惑的地方。这不是真的容易受到xss攻击或用户浏览器中的恶意扩展吗?Cookie是为了防止这些攻击而设计的吗?既然如此,这不是从htmlonly cookie等发明中倒退了一步吗?
其次,第三步似乎记录得很差,在隐式流中有一个oauth2协议的“重定向”参数部分,在“代码交换验证密钥授权(pkce)”中,这在任何地方都没有真正描述?
那么,我是否错过了将访问令牌“带回”SPA以便与资源服务器共享的步骤?
1条答案
按热度按时间t40tm48m1#
您应该使用
authorization_code
的grant_type运行代码流。这绝不会在浏览器响应中返回访问令牌。相反,它会返回一个授权码,该授权码将被交换为令牌。还可以使用PKCE来证明开始登录的一方就是结束登录的一方。另外,请注意OAuth为基于浏览器的应用程序提供的架构模式。在最佳安全性方面,通常使用后端前端(BFF),代表SPA发布安全cookie,具有更少的XSS风险。这也使您能够在获取令牌时附加后端客户端密钥。