使用OAuth2.0保护REST API - Krishani Indrachapa - Medium

作者:API传播员 · 2025-12-13 · 阅读时间:4分钟

有多种身份验证机制可用于OpenID Connect。然而,OAuth 2.0 由于其独特的优势,在 API 身份验证中更受欢迎。

本文将详细介绍 OAuth 2.0 的基本概念、支持的授权类型,以及如何在没有用户参与的情况下,通过 client_credentials 授权类型实现 API 之间的通信。


什么是 OAuth 2.0?

OAuth 2.0 是一种授权协议,它允许我们为 API 的不同部分或服务定义访问范围(Scopes)。通过使用令牌进行授权,并且令牌会在一段时间后失效,从而降低了攻击者重复利用令牌的可能性。有关 OAuth 2.0 的详细说明,可以参考 Swagger 官方文档


OAuth 2.0 的授权类型

应用程序可以通过多种方式获取访问令牌,这些方式被称为授权类型(Grant Types)。以下是几种常见的授权类型:

  • 授权码(Authorization Code)

    用于从令牌端点获取访问令牌。

  • 密码(Password)

    使用用户名和密码登录,仅适用于第一方应用程序。

  • 客户端凭据(Client Credentials)

    用于在没有用户上下文的情况下访问应用程序。

  • 刷新令牌(Refresh Token)

    用于获取新的访问令牌。


作用域(Scopes)

作用域用于限制对特定资源的访问。如果您获得了一个带有特定作用域的访问令牌,则只能执行与该作用域绑定的任务。例如,一个访问令牌可能绑定到 READWRITE 作用域,或者仅限于 READ。如果客户端尝试使用带有 READ 作用域的令牌调用需要 WRITE 权限的 API 端点,则调用将失败。


使用 client_credentials 授权类型获取访问令牌

在开始之前,您需要在授权服务器(例如 Keycloak)中注册 API。注册完成后,您将获得一个客户端 ID 和客户端密码,例如:

客户端 ID: 34f73973-7f3a-4579-b784-a86e2474b652

接下来,您需要一个有效的承载令牌(Bearer Token)来与启用了 OAuth 的 API 端点通信。以下是使用 client_credentials 授权类型调用授权服务器的示例:

curl -X POST 
  https:///oauth/token 
  -H 'Content-Type: application/x-www-form-urlencoded' 
  -d 'grant_type=client_credentials&client_id=&client_secret='

成功调用后,您将收到类似以下的响应,其中包含访问令牌:

{
  "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
  "token_type": "Bearer",
  "expires_in": 3600
}

使用访问令牌调用 API

获取访问令牌后,您可以将其作为承载令牌调用目标 API 端点。例如:

curl -X GET 
  https:// 
  -H 'Authorization: Bearer {token}'

请注意,访问令牌有一定的有效期。当令牌过期后,您需要重新获取一个新的访问令牌。


通过本文的介绍,您应该对 OAuth 2.0 的基本概念和使用方法有了更深入的了解。无论是保护 REST API,还是实现安全的服务间通信,OAuth 2.0 都是一个强大的工具。

原文链接: https://krishaniindrachapa.medium.com/securing-rest-api-with-oauth2-0-f76af74aa030