API 授权方法
在本文中,我们将探讨三种常见的 API 授权机制:API 密钥、基本身份验证和 OAuth JWT 令牌。最后,我们还将讨论 Logto 如何帮助你使用 OAuth JWT 令牌保护你的 API。
在本文中,我们将探讨三种常见的 API 授权机制:API 密钥、基本身份验证和 OAuth JWT 令牌。最后,我们还将讨论 Logto 如何帮助你使用 OAuth JWT 令牌保护你的 API。
在当今世界中,API 是现代应用程序的支柱。它们是从后端服务访问数据和功能的主要途径。API 允许来自不同方的不同软件系统进行通信和共享数据,使得它们对企业至关重要。然而,API 也是攻击者的常见目标。API 保护的需求比以往更强烈。
API 保护是防止未经授权访问、滥用和攻击的过程。它是任何 API 策略的关键组成部分。在本文中,我们将探讨三种常见的 API 保护机制:API 密钥、基本身份验证和 OAuth JWT 令牌。最后,我们还将展示 Logto 如何使用 OAuth JWT 令牌保护你的 API。
API 密钥是保护 API 的最简单和最广泛使用的方法。API 密钥是由 API 提供者生成并与授权用户共享的一长串字符。访问 API 时,该密钥必须包含在请求头中。API 密钥对于基本安全需求来说简单有效。例如,诸如 Google Maps API 和 AWS 等流行服务提供 API 密钥来控制访问和监控使用情况。然而,在安全性方面,它们有其局限性。它们通常用于机器对机器的通信。
e.g.
基本身份验证是保护 API 的另一种常见方法。它是构建在 HTTP 协议中的一种简单验证方案。它涉及在请求头中发送用户名和密码。服务器在验证凭据后会返回请求的资源。例如,许多 web 应用程序和 RESTful API 使用基本身份验证作为快速简单的用户验证方式。基本身份验证比 API 密钥更安全,因为它使用用户名和密码而不是静态密钥。然而,它对于敏感数据来说仍然不够安全。由于客户端凭据以明文方式传输,容易被拦截。基本身份验证适用于网络连接安全的内部系统,例如机器对机器的通信。
e.g.
或
JSON Web Token (JWT),由 RFC 7519 定义,是一种用于在各方之间作为 JSON 对象安全传输信息的开放标准。它通常用于 web 应用程序和 API 中的身份验证和授权。
一个签名的 JWT 格式如下:
它由三部分组成,用 . 分隔:头部、负载和签名。
以下是一个 JWT 示例:
OAuth 是一个全面的 API 安全和访问委托开放标准,常用作客户端用户授权网站或应用程序访问其在其他网站上的信息,而无需提供密码的方式。
与 JWT 一起使用时,OAuth JWT 令牌提供了强大的安全解决方案。与每个请求传输例如用户名和密码的敏感信息不同,OAuth JWT 令牌会在成功验证后发放给授权客户端。这些令牌包含关于用户及其权限的信息。此外,JWT 令牌经过数字签名以防篡改,并且可以到期。这提供了额外的安全层。
OAuth JWT 令牌的一个重要优点是其灵活性。它们可以用于各种类型的应用程序,包括 web 和移动应用程序、单点登录解决方案等。例如,Facebook、Twitter 和 LinkedIn 等主要社交媒体平台使用 OAuth JWT 令牌来验证用户并安全地允许第三方应用程序访问用户数据。
身份验证方法的选择取决于应用程序的具体要求和安全性考虑。API 密钥虽然简单,但安全性较低;基本身份验证提供了更强的安全性,但缺乏用户身份功能;而 OAuth JWT 令牌则提供了强大的安全性和用户身份功能,但增加了实现和管理的复杂性。
Logto 提供了一种简单且安全的方式来使用 OAuth JWT 令牌保护你的 API。它支持 OAuth 2.0 和 OpenID Connect (OIDC) 标准,使你可以选择最适合你需求的身份验证方法。你可以使用 client_credentials 流程进行机器对机器的通信,使用 authorization_code 流程进行 web 应用程序的通信。
Logto 对机器对机器类型的应用程序使用 client_credentials 流程。此流程适用于后端服务器之间的通信,其中客户端是能够安全存储客户端凭据的机密客户端。它也被称为“两阶段 OAuth”,因为它不涉及用户。客户端凭据直接用作授权授予以获取访问令牌。
集成过程简单明了:
请查看我们的machine-to-machine integration documentation,获取更多详细信息。
对于诸如 web 应用程序之类的公共客户端,Logto 使用 authorization_code 流程来验证用户。此流程适用于客户端为公共客户端而无法安全存储客户端凭据的 web 应用程序。它也被称为“三阶段 OAuth”,因为它涉及用户。用户被重定向到授权服务器以进行身份验证并授权客户端。然后客户端使用授权码来获取访问令牌。
相比机器对机器流程,集成流程稍微复杂一些:
请查看我们的Protect your Express.js API with JWT and Logto文章,作为一个集成 Logto 和 React 并使用 JWT 令牌访问你的 Express 服务器 API 的全面示例。