令牌处理程序模式通过将会话和 Cookie 的便利性与访问令牌的强度相结合,解决了多个 SPA 漏洞。
译自 Secure Single-Page Apps With Cookies and Token Handlers,作者 Jonas Iggbom。
单页应用程序 (SPA) 作为一种易于开发的数字数据交付和客户参与界面,正在迅速获得更强的立足点。曾经,拥有单个后端服务器提供 HTML 和数据的网站是主要的在线界面,但现在,拥有多个后端微服务的 SPA 变得越来越普遍。
然而,SPA 本质上难以保护。它们不是连接到单个后端服务器,而是通过 API 连接到 微服务。虽然这赋予了 SPA 轻量级的优势,但也带来了重大的安全风险。用户身份验证通常必须在浏览器中进行,而不是在网络防火墙后面的受保护服务器中进行。
此外,SPA 通常依赖于大量与应用程序 通过 API 连接 的第三方数据。大量第三方连接会造成双重问题。
首先,开发人员无法控制由其他从业人员和组织创建的 API 中内置的安全措施。其次,由于涉及大量详细的自定义代码和输入设置,在这种复杂且多样化的环境中进行编程可能很繁琐。很容易错过重要步骤,不知不觉地造成安全漏洞。此外,随着环境的增长和适应不断变化的业务需求,隐藏的安全风险可能会被引入。
在保护网站时,开发人员可以使用基于 Cookie 的会话来授予用户访问 Web 应用程序的权限。前端网站客户端在浏览器上存储 Cookie,这些 Cookie 会在每次用户访问请求时发送到单个后端数据服务器。授权决策可以基于存储在存储中的会话数据,因此用户访问仍然在网络防火墙后面得到保护。
这种设置不适用于 SPA,因为单页应用程序没有专用的后端。内容交付网络 (CDN) 通常通过静态文件将代码提供给 SPA。这些文件通过 API 调用返回到应用程序。在 SPA 配置中,用户的会话无法保存在 Cookie 中,因为没有后端数据存储。相反,可以使用访问令牌代表经过身份验证的用户调用 API。
SPA 安全挑战的关键在于基于浏览器的身份验证容易受到各种网络攻击类型的攻击。一种威胁类型是跨站点脚本 (XSS) 凭据窃取。在这种攻击方法中,恶意攻击者会注入能够窃取 访问令牌和用户凭据到浏览器 的代码,以获取对宝贵数据和系统的未经授权的访问。
虽然 XSS 是一种常见的漏洞,但它并不是开发人员必须防御的唯一漏洞。更困难的是,修复一个漏洞通常会打开新的漏洞,这使得保护 SPA 成为一场永无止境的不断变化的目标游戏。例如,使用 OAuth 流来使用 OAuth 令牌而不是会话 Cookie 身份验证用户或 API 访问似乎是缓解 XSS 攻击的好方法。
但是,如果这些令牌存储在本地存储中,威胁行为者可以轻松地访问本地存储和会话存储以窃取令牌。如果令牌可以刷新,问题会加剧,因为攻击者即使在用户会话结束后也能获得访问权限。
安全修复可能带来的意外问题另一个例子是在内容安全策略 (CSP) 标头中构建强大的安全策略。虽然这可以增加另一层安全控制,但某些来源可能能够打开内容安全策略并禁用它们。
最重要的是,在防御对数据和系统的未经授权和恶意访问方面,浏览器是一个充满敌意的环境。任何安全措施都需要仔细测试和持续警惕,以确保关闭一个攻击媒介不会为另一个攻击媒介打开通道。
最近为保护用户身份验证免受恶意行为者攻击而开发的一种保护 SPA 的方法是令牌处理程序模式,该模式将网站 Cookie 安全性和访问令牌合并。通过实施将身份验证从浏览器中移除并利用使用同站点 Cookie 和令牌的 BFF(后端到前端)配置的令牌处理程序架构,组织能够从 SPA 的轻量级方面中获益,而不会牺牲安全性。
在此设置中,作为后端组件托管的 OAuth 代理位于 SPA 和授权服务器之间。OAuth 代理处理 SPA 的 OAuth 流程,并且不会向 SPA 发放令牌,而是会发放一个安全的 HTTP 仅限 Cookie,SPA 可以使用该 Cookie 访问其后端 API 和微服务。
托管在高性能 API 网关中的 OAuth 代理位于 SPA 和 API 之间,并将 Cookie 转换为访问令牌。这样,令牌永远不会到达 SPA,在那里它们可能会被威胁行为者窃取。
令牌处理程序模式的一个主要优势是它将 API 访问与网站问题分离,以便组织可以体验 SPA 的全部优势。使用 OAuth 和 OpenID Connect 协议,开发人员可以将令牌组件部署到架构的 API 端,有效地将其与环境的 Web 开发端分离。这样,网站和应用程序前端开发人员和经理可以最大限度地提高用户体验,而不会受到后端授权限制。
令牌处理程序模式通过提供一种方法来利用网站和应用程序安全性的最佳方面,将会话和 Cookie 的便利性与访问令牌的强度相结合,从而解决了多个 SPA 漏洞。但是,它可能是一个复杂的架构来实现。有 资源,包括设计文档,可提供深入的指导,帮助开发人员利用 SPA 安全性的这一突破。
令牌处理程序模式使组织能够自信地使用 SPA,而不会引入新的安全漏洞。这种架构是保护 SPA 免遭未经授权或恶意访问的令人欢迎的演变。它为一直担心 SPA 安全性的团队以及一直不愿使用 SPA 的公司打开了新的可能性。