Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
社区首页 >专栏 >5步实现军用级API安全

5步实现军用级API安全

作者头像
云云众生s
发布于 2024-04-23 01:42:18
发布于 2024-04-23 01:42:18
1440
举报
文章被收录于专栏:云云众生s云云众生s

保护数字服务的最有效方法是从坚实的基础开始,然后尽可能地将安全性提升到军事级别。

译自 5 Steps Toward Military-Grade API Security,作者 Gary Archer。

针对软件的网络攻击正变得越来越复杂。技术工具的进步为恶意攻击者提供了多种自动化攻击方式。对于许多提供数字服务的组织而言,应对威胁可能令人望而生畏。当您资源有限且希望专注于业务目标时,如何最好地管理安全性

让我解释一下一种迭代方法,以采用“军用级”安全思维。我将表明,这并不需要您成为一个将主要资源分配给打击网络威胁的富裕组织。相反,军用级是一种方法,您可以在其中持续审查您的安全性并在切实可行时对其进行加强。示例可能是使用更强的加密形式来保护连接、更安全的用户身份验证形式或处理特定威胁的较新的安全设计模式。

主要目标应该是能够以抵御未来威胁的方式保护您的数字资产的架构。保护数字服务的最佳方法是从坚实的基础开始,然后尽可能地将安全性提升到军用级。这使您能够保持安全性处于最新状态。

步骤 1:使用安全标准

您应该根据许多专家审查的标准实施应用程序安全性。RFC 6749 中的 OAuth 2.0 授权框架提供了这样的设置。OAuth 是一系列规范,可映射到组织的安全用例。这些标准不断发展,以跟上新的威胁。

OAuth 以使用称为访问令牌的 API 消息凭据来保护数据为中心。此令牌由称为授权服务器的专用安全组件颁发。访问令牌旨在根据业务权限锁定,并由授权服务器加密签名。客户端从授权服务器请求访问令牌,然后将访问令牌发送到 API 端点。面向用户的应用程序在收到访问令牌时在授权服务器触发用户身份验证。

使用 OAuth 使您能够实施零信任架构,该架构同时考虑了 API 和前端应用程序的最佳实践。示例部署如下图所示,其中 API 和授权服务器托管API 网关之后。API 需要 JSON Web 令牌 (JWT) 格式 中的访问令牌,并在每个 API 请求上对令牌进行加密验证。然后,API 信任访问令牌中的声明并将其用于业务授权。

在此示例中,还遵循了客户端最佳实践。互联网客户端接收不透明(引用)访问令牌,这些令牌不会泄露访问令牌数据,因为该数据仅供 API 使用。基于浏览器的应用程序在进行 API 请求时通常会发送仅限 HTTP 的 cookie,而不是直接使用访问令牌。

API 网关是一种托管最佳实践。仅将网关暴露给互联网,而不是直接暴露 API 和授权服务器。然后,网关可以执行常见的安全检查,例如速率限制。它还可以在 API 请求期间执行令牌转换,以将从客户端发送的不透明令牌或 cookie 转换为 JWT 访问令牌。这统一了您的 API 安全性,以便 API 仅需要接收 JWT 访问令牌,无论客户端如何。

当一个组织不熟悉 OAuth 时,由于安全性的分布式特性,在实施其流程时存在学习曲线。理解编码技术并部署整个系统需要一些时间,但一旦您拥有基于令牌的架构,您的基本设置将使您能够发展您的安全性以使用军用级功能。

步骤 2:加强 API 凭据

OAuth 可以使用强安全配置文件,例如 FAPI 2.0 提供的配置文件。在某些行业(例如银行和医疗保健)中,实施此类配置文件可能是强制性的。还建议其他组织使用强安全性。

首先,您应该专注于强大的 API 访问控制。在使用 OAuth 时,攻击者无法为您的 API 创建有效的访问令牌,因为这样做需要窃取授权服务器的加密私钥。然而,默认情况下,访问令牌是持有者令牌,这意味着 API 无法区分合法调用者和恶意调用者。因此,如果攻击者以某种方式截获了访问令牌,他们可以将其发送到您的 API 以获取对数据的访问权限。

为防止这种情况,请尽可能使用持有证明令牌。一种常见的用例是向业务合作伙伴提供 API。在这种情况下,您可以使用 RFC 8705 标准指定的 OAuth 2.0 互 TLS 客户端身份验证和证书绑定访问令牌。客户端使用客户端证书在授权服务器上进行身份验证,并获取绑定到客户端证书的访问令牌。在后续 API 请求中,客户端必须在每次 API 请求中发送相同的客户端证书以及访问令牌。然后,API 可以区分提供私钥持有证明的合法请求和不提供私钥持有证明的恶意请求,并拒绝恶意调用者的访问。

您可以考虑的另一种持有证明选项(不需要您管理客户端证书)是 在应用程序层演示持有证明 (DPoP)。它的工作方式在技术上与客户端证书类似,只是客户端以 JSON Web Key (JWK) 格式生成运行时密钥对。为了进行身份验证,客户端创建一个证明 JWT,并使用其私钥对其进行签名,并且访问令牌绑定到客户端的持有证明密钥。在每次 API 请求中,客户端都必须发送一个新的证明 JWT,该 JWT 由相同的私钥签名。然后,API 可以再次区分提供私钥持有证明的合法请求和不提供私钥持有证明的恶意请求,并拒绝恶意调用者的访问。

由于持有证明验证是一个通用流程,因此您可以通过编写一个小型 API 网关插件在 API 网关中实现它。这可以帮助您在多个 API 之间共享此类逻辑,同时保持 API 代码以业务为中心。

步骤 3:加强客户端安全性

在评估客户端安全性时,您必须解决特定于环境的威胁。在浏览器中,军用级从确保针对令牌盗窃的最佳保护开始,其中 恶意 JavaScript 威胁,也称为跨站点脚本 (XSS),是最令人担忧的问题。为了减少 XSS 漏洞的影响,建议使用最新且最安全的仅 HTTP SameSite Cookie 将 OAuth 令牌传输到您的 API。

使用后端到前端 (BFF) 组件向 JavaScript 应用程序颁发 Cookie。BFF 在获取访问令牌时也应使用客户端凭据。如果您使用 OAuth 来保护单页应用程序 (SPA),则 令牌处理程序模式 可以成为一种便捷的选择,以便在影响较小的情况下启用此功能。然后,实用程序 API 会代表其 SPA 颁发 Cookie,而不会对您的 Web 架构产生不利影响。

在 OAuth 架构中,客户端通过运行 OAuth 流程来获取访问令牌。为了对用户进行身份验证,客户端使用 OpenID Connect 标准并运行 代码流程。客户端向授权服务器发送请求参数并接收响应参数。但是,这些参数可能会被篡改。例如,攻击者可能会重放请求并更改范围值以尝试提升权限。

为了防止请求篡改,您可以使用 RFC 9126 中的 推送授权请求 (PAR)。这只是代码流程的另一种形式,需要进行一些小的代码更改。要使用 PAR,客户端首先向授权服务器发送 POST 请求以及客户端凭据。然后,客户端可以接收一个 request_uri,并在浏览器重定向期间使用它。为了防止重放攻击,每个 request_uri 只可使用一次。

保护响应的等效解决方案是使用 OpenID Foundation 的 JWT 安全授权响应模式 (JARM)。授权响应参数在签名的 JWT 中接收,因此无法被篡改。您可以将 PAR 和 JARM 一起使用,而无需任何额外的密钥管理,因为只有授权服务器的密钥用于对响应 JWT 进行签名。

步骤 4:加强用户身份验证

OAuth 标准未提供有关如何加强用户身份验证的建议。然而,在实践中,授权服务器应允许面向用户的应用程序对用户登录使用可靠的安全性,例如通过应用 多因素身份验证。弱身份验证方法容易受到帐户接管攻击,其中恶意方可以访问用户的数据。

从淘汰密码开始,因为它们是许多安全漏洞的根源。例如,网络钓鱼攻击可能会从一个网站窃取用户的密码,然后在另一个网站上成功使用它。更糟糕的是,网上发生了许多服务器漏洞事件,泄露了许多用户的密码。

军用级替代方案将基于非对称加密,其中用于一个服务器来源的密钥不能在另一个服务器上使用。这意味着用户在本地保留其私钥,而服务器只处理公钥。这种类型的解决方案具有防网络钓鱼功能,并且不需要服务器存储用户机密。

对于许多组织来说,强化用户身份验证的最便捷方法是使用基于 FIDO 联盟的 WebAuthn 范 Passkeys现在由主流桌面和移动操作系统提供 Passkeys,因此没有困难的用户先决条件。 Passkeys 还可以使用与密码相同的帐户恢复行为。

步骤 5:使用可扩展安全性

您的应用程序安全性不是一成不变的,它会随着发现新的威胁和设计最佳实践来缓解这些威胁而不断发展。您偶尔需要引入额外的安全组件或与第三方系统集成。因此,您的安全架构应该是可扩展的,并且能够在新的安全功能可用时使用它们。

在未来,可能会出现更强大的方式来实现 OAuth 安全的移动应用程序。目前的一个担忧是,它们通常无法安全地存储客户端凭据,因此它们通过遵循 RFC 8252 中发布的 OAuth for Native Apps 作为 OAuth 公共客户端运行。最安全的选择是使用声明的基于 HTTPS 方案的重定向 URI,以防止恶意应用程序冒充实际应用程序。然而,较新的 AndroidiOS 设备现在支持可以防止冒充的客户端证明功能。应用程序可以加密签名一个质询来证明其身份,并从云服务接收 JWT 响应。此 JWT 可以在代码流开始时发送到授权服务器,以启用 强化的移动流

身份验证将继续需要随着时间的推移而强化。虽然通行密钥提高了密码的安全性,并且适用于许多数字服务,但您并不知道用户是谁。当您需要用户身份的真实证明时,您的授权服务器应支持可扩展性,以使您能够与提供身份证明的第三方系统集成。将来,支持使用数字凭据进行身份验证的授权服务器将使您能够从受信任的第三方接收用户身份的真实证明。

为了对抗自动化攻击,我预计跟踪使用模式的系统将在安全决策中得到更广泛的应用。这些模式可以在用户身份验证和 API 访问期间应用。基于策略的方法可能是实现这种类型的动态授权要求的首选方式。Open Policy Agent 等策略引擎可能会查阅使用数据并向应用程序返回风险评分,然后可以使用该评分来做出安全决策。

当然,这些类型的集成通常只需要偶尔进行一次。重要的行为是您的设置能够适应新要求并在需要时插入新的安全行为。

学习军用级安全性

军用级是一种软件安全方法,它使用强大的加密和最新的标准,这些标准已得到许多专家的审查。要集成军用级,您需要使用实现所需复杂标准的专业安全组件。

数字服务的安全性需要一个关注点分离的安全架构,您可以在其中将复杂的安全性外包给应用程序级组件。一旦您有了正确的设置,升级到军用级功能就很容易,因为只需要对应用程序代码进行微小的更改。按照以下主要步骤操作,您将获得一个面向未来的设置,可以适应新要求:

  • 使用安全标准
  • 强化 API 凭据
  • 强化客户端安全性
  • 强化用户身份验证
  • 使用可扩展安全性

在 Curity,我们全天致力于安全工作。您可以阅读我们的网站文章或运行我们的代码示例,以进一步了解现代化安全标准和设计模式。我们的资源能让您改进您的 OAuth 架构,或将您当前安全领域的区域升级为军用级别。我们的资源基于标准,而不是与我们的产品捆绑:

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-04-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在微服务架构中实现安全性?
导读:网络安全已成为每个企业都面临的关键问题。几乎每天都有关于黑客如何窃取公司数据的头条新闻。为了开发安全的软件并远离头条新闻,企业需要解决各种安全问题,包括硬件的物理安全性、传输和静态数据加密、身份验证、访问授权以及修补软件漏洞的策略,等等。无论你使用的是单体还是微服务架构,大多数问题都是相同的。本文重点介绍微服务架构如何影响应用程序级别的安全性。
Bug开发工程师
2019/05/31
4.9K0
OAuth 详解<1> 什么是 OAuth?
从高层次开始,OAuth 不是API或服务:它是授权的开放标准,任何人都可以实施它。
用户1418987
2023/04/10
4.5K0
OAuth 详解<1> 什么是 OAuth?
浏览器中存储访问令牌的最佳实践
浏览器提供了各种持久化数据的解决方案。当存储令牌时,您应该权衡存储选择与安全风险。
云云众生s
2024/03/27
2660
浏览器中存储访问令牌的最佳实践
使用OAuth 2.0访问谷歌的API
谷歌的API使用的OAuth 2.0协议进行身份验证和授权。谷歌支持常见的OAuth 2.0场景,如那些Web服务器,安装,和客户端应用程序。
拿我格子衫来
2022/01/24
4.5K0
使用OAuth 2.0访问谷歌的API
如何正确集成社交登录
创建一个解决方案的指南,避免安全风险,能够很好地扩展到许多组件,易于扩展,并且只需要简单的代码。
云云众生s
2024/03/27
1350
如何正确集成社交登录
分享一篇详尽的关于如何在 JavaScript 中实现刷新令牌的指南
刷新令牌允许用户无需重新进行身份验证即可获取新的访问令牌,从而确保更加无缝的身份验证体验。这是通过使用长期刷新令牌来获取新的访问令牌来完成的,即使原始访问令牌已过期也是如此。
前端达人
2023/08/31
3640
分享一篇详尽的关于如何在 JavaScript 中实现刷新令牌的指南
[安全 】JWT初学者入门指南
首先,什么是JSON Web令牌,或JWT(发音为“jot”)?简而言之,JWT是用于令牌认证的安全且值得信赖的标准。JWT允许您使用签名对信息(称为声明)进行数字签名,并且可以在以后使用秘密签名密钥进行验证。
架构师研究会
2019/05/13
4.1K0
[安全 】JWT初学者入门指南
API NEWS | 谷歌云中的GhostToken漏洞
欢迎大家围观小阑精心整理的API安全最新资讯,在这里你能看到最专业、最前沿的API安全技术和产业资讯,我们提供关于全球API安全资讯与信息安全深度观察。
小阑本阑
2023/09/14
1900
API NEWS | 谷歌云中的GhostToken漏洞
与我一起学习微服务架构设计模式11—开发面向生产环境的微服务应用
为了使服务做好部署到生产环境中的准备,需要确保满足三个关键的质量属性:安全性、可配置性和可观测性。
java达人
2019/12/19
2K0
从五个方面入手,保障微服务应用安全
随着计算机、互联网技术的飞速发展,信息安全已然是一个全民关心的问题,也是各大企业非常重视的问题。企业一般会从多个层次着手保障信息安全,如:物理安全、网络安全、系统安全(主机和操作系统)、应用安全等。
yuanyi928
2019/08/21
2.7K0
从五个方面入手,保障微服务应用安全
深入探讨安全验证:OAuth2.0、Cookie与Session、JWT令牌、SSO与开放授权平台设计
认证和授权是安全验证中的两个重要概念。认证是确认身份的过程,用于建立双方之间的信任关系。只有在认证成功的情况下,双方才可以进行后续的授权操作。授权则是在认证的基础上,确定用户或系统对资源的访问权限。
努力的小雨
2023/11/11
1.6K0
8种至关重要OAuth API授权流与能力
在本文中,Curity的Daniel Lindau概述了重要的OAuth授权流程和能力。
yuanyi928
2018/12/07
1.7K0
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
OAuth2(Open Authorization 2.0)是一种用于授权的开放标准协议,用于通过第三方应用程序访问用户在某个服务提供商上存储的资源,而无需共享用户的凭证(例如用户名和密码)。它允许用户授权给第三方应用程序访问受保护的资源,同时确保用户的凭证信息不被直接暴露给第三方应用程序。
苏泽
2024/03/01
2.3K0
【Spring底层原理高级进阶】【SpringCloud整合Spring Security OAuth2】深入了解 Spring Security OAuth2:底层解析+使用方法+实战
OAuth 2.0身份验证
浏览网络时,几乎可以肯定您会遇到一些使您可以使用社交媒体帐户登录的网站,该功能很可能是使用流行的OAuth 2.0框架构建的,OAuth 2.0对于攻击者来说非常有趣,因为它非常常见,而且天生就容易出现实现错误,这可能导致许多漏洞,从而使攻击者可以获得敏感用户数据,并有可能绕过身份验证。
Al1ex
2021/04/22
3.5K0
OAuth 2.0身份验证
Spring Security入门4:各类软件技术架构中,如何保证安全性?
在架构设计中,应该考虑将安全防护机制分为多个层次,每个层次都有不同的安全措施和策略,确保全面覆盖系统的安全需求。在架构设计的早期阶段,应该对可能的威胁进行建模和分析,评估系统的风险,以便在设计中考虑相应的安全措施,在架构中加入严格的访问控制,包括身份验证、权限管理和安全策略等,确保只有授权的用户可以进行特定的操作,可以在系统中加入安全日志和监控机制,记录系统的操作和活动,及时发现和响应安全事件,以保证系统安全。
Designer 小郑
2023/11/21
3260
Spring Security入门4:各类软件技术架构中,如何保证安全性?
Go语言中的OAuth2认证
在网络应用程序开发中,安全性和用户身份验证是至关重要的方面。OAuth2(开放授权2.0)是一种广泛应用于网络身份验证和授权的标准协议。它允许客户端应用程序以安全且受控的方式访问受保护资源,而无需用户提供其凭据。
繁依Fanyi
2024/04/15
6850
OAuth2.0 OpenID Connect 一
一开始,有一些专有方法可以与外部身份提供者合作进行身份验证和授权。然后是 SAML(安全断言标记语言)——一种使用 XML 作为其消息交换类型的开放标准。然后,出现了 OAuth 和 OAuth 2.0——同样是开放的,也是一种使用 JSON 作为媒介的现代 RESTful 授权方法。现在,“安全委托访问”的圣杯 OpenID Connect(以下简称 OIDC)运行在 OAuth 2.0 之上。
用户1418987
2023/10/16
4760
OAuth2.0 OpenID Connect 一
[译] 深入 OAuth2.0 和 JWT
从基于计算机的应用出现伊始,几乎每个开发者在其职业生涯内都会面对的一个最常见也是最复杂的问题,就是安全性(security)。这类问题意味着要考虑理解由谁提供什么数据/信息,此外还有关乎时间、校验、再校验等诸如此类的很多其他方面的事情。
江米小枣
2020/06/15
3.1K0
六种Web身份验证方法比较和Flask示例代码
在本文中,我们将从Python Web开发人员的角度看处理Web身份验证的最常用方法。
小锋学长生活大爆炸
2022/05/14
7.5K0
六种Web身份验证方法比较和Flask示例代码
提高微服务安全性的11个方法
如果你正在开发一个大型/复杂的应用,并且你经常需要快速,可靠地升级部署 ,那么微服架构是一个不错的选择。
Bug开发工程师
2020/09/22
1.3K0
提高微服务安全性的11个方法
推荐阅读
相关推荐
如何在微服务架构中实现安全性?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文