在传统身份验证方法中,客户端使用用户名和密码进行身份验证以请求服务器上的受保护资源。为了向第三方应用程序提供受限制资源的访问权限,资源所有者与第三方共享其凭据。

以下是一些限制:

  1. 第三方应用程序存储凭据以供将来使用,通常是明文密码。

  2. 尽管密码本身存在安全弱点,但服务器仍需要支持密码身份验证。

  3. 如果任何第三方应用程序受到入侵,将导致泄露最终用户密码以及该密码保护的所有数据。

OAuth

OAuth 引入授权层以解决这些问题。OAuth 2.0 是一种授权协议,用于为应用程序授予资源的安全访问权限。您的客户端是通过 Access Token 授权的。访问令牌具有一个范围,以定义令牌可以访问哪些资源。有关 OAuth 2.0 的更多信息,请参见 OAuth 规范

在注册新应用程序时,如果您允许使用手机或 Facebook 联系人自动获取新联系人,说明您使用的是 OAuth 2.0。

OAuth 提供安全的委派访问,其中,应用程序可以代表用户执行操作或从服务器中访问资源,而无需共享其凭据。这是通过以下方法实现的:允许身份提供程序 (IdP) 在用户批准的情况下向第三方应用程序颁发令牌。

OIDC

OpenID Connect 1.0 是 OAuth 2.0 协议上面的简单身份层。它允许客户端根据授权服务器执行的身份验证来验证最终用户的身份,并以可互操作且类似于 REST 的方式获取有关最终用户的基本配置文件信息。有关更多信息,请参见欢迎使用 OpenID Connect

在注册 YouTube、Jira、购物车等应用程序时,您可以选择继续使用已知授权服务器/IdP(例如 Google、Facebook 等)登录。

Google 等 IdP 使用 Open ID,以便用户可以登录到 IdP,然后访问其他网站和应用程序,而无需登录或共享其登录信息。

OAuth 和 OIDC 中使用的术语

资源所有者:

能够授予受保护资源的访问权限的个人或系统。

客户端:

这是一个应用程序,它代表资源所有者并获得其授权以发出受保护资源请求。

资源服务器:

该服务器托管受保护资源,并在验证访问令牌后使用访问令牌接受和响应受保护资源请求。

授权服务器:

在成功对资源所有者进行身份验证后,该服务器向客户端应用程序颁发访问令牌。

客户端 ID:

这是授权服务器为在其中注册的应用程序分配的唯一标识符。

客户端密钥:

这是仅应用程序和授权服务器知道的密钥。

授权代码:

授权代码是授权服务器向客户端颁发的临时代码。客户端在后续请求中交换授权代码以获取访问令牌。

OAuth 角色

以下是 OAuth 角色:

  1. 资源所有者

  2. 资源服务器

  3. 客户端

  4. 授权服务器

注:

NSX Advanced Load Balancer 支持客户端和资源服务器角色。

NSX Advanced Load Balancer 不能充当客户端或资源服务器。它可以充当客户端和资源服务器。作为客户端和资源服务器,NSX Advanced Load Balancer 从最终用户获取授权代码,交换授权代码以获取访问令牌,验证访问令牌,并允许客户端根据基于声明的令牌验证和授权策略访问资源。

用于获得授权的 OAuth 授予

OAuth 2.0 授权框架支持多种不同的流程(或授予)。流程是获取访问令牌的方法。为了请求访问令牌,客户端从资源所有者获得授权。授权以授权授予的形式表示,客户端使用该授权授予请求访问令牌。

OAuth 定义了以下 4 种授予类型:

  1. 授权代码

  2. 隐式

  3. 资源所有者密码凭据

  4. 客户端凭据

注:

NSX Advanced Load Balancer 仅支持授权代码授予流程。

授权代码授予流程

以下是授权代码授予类型流程:



  1. 资源所有者访问应用程序/客户端,并触发身份验证和授权。

  2. 客户端将用户重定向到授权服务器,并在其中提示输入用户名和密码。在该页面上,资源所有者可以选择授权客户端代表自己访问资源的权限。

  3. 授权服务器接收身份验证和授权授予。

    1. 在资源所有者对应用程序进行授权后,授权服务器使用重定向将授权代码发送到客户端。

  4. 客户端使用授权代码从授权服务器请求访问令牌。

  5. 授权服务器验证授权代码并颁发访问令牌。如果启用了 OIDC,还会随访问令牌一起颁发 ID 令牌。

  6. 客户端提供访问令牌以尝试访问资源服务器中的资源。

  7. 如果访问令牌有效,资源服务器将返回用户授权客户端接收的资源。

不同类型的令牌

  1. 访问令牌:访问令牌是用于访问受保护资源的凭据。访问令牌是表示向客户端颁发的授权的字符串。访问令牌可以分为两种类型,例如,JSON Web 令牌 (JWT) 或含糊令牌。对于 JWT,资源服务器可以自行验证访问令牌;对于含糊令牌,资源服务器与侦测端点上的授权服务器进行通信以验证访问令牌。

  2. 刷新令牌:刷新令牌是授权服务器向客户端颁发的,用于在当前访问令牌失效或过期时从授权服务器获取新的访问令牌。以下流程图说明了如何刷新过期的访问令牌。



  3. ID 令牌:如果在客户端上启用了 OIDC,则使用该令牌。该令牌由授权服务器返回,它对用户的身份验证信息进行编码。

不同类型的端点

授权端点:

客户端使用该端点通过用户代理重定向从资源所有者获得授权。

令牌端点:

客户端使用该端点交换授权授予以获取访问令牌。可以使用相同的端点获取刷新令牌和 ID 令牌(对于 OIDC)。

重定向端点/重定向 URL/回调 URL:

授权服务器使用该端点通过资源所有者用户代理将包含授权凭据的响应返回到客户端。这通常称为 Call back URL

侦测端点:

侦测端点用于验证含糊访问令牌。对于含糊访问令牌,资源服务器将请求发送到授权服务器的侦测端点以验证访问令牌。

用户信息端点:

用户信息端点可用于检索有关用户的身份信息。它用于 OIDC。为了获取有关最终用户的请求声明,客户端使用获取的访问令牌向用户信息端点发送请求。

隐藏敏感日志配置文件配置

可以使用敏感日志配置文件屏蔽 OAuth 敏感字段(例如基本授权)。

以下是在 OAuth 日志中配置敏感信息的步骤:

| sensitive_log_profile                  |                             |
|   header_field_rules[1]                |                             |
|     name                               | Rule 1                      |
|     index                              | 1                           |
|     enabled                            | False                       |
|     match                              |                             |
|       match_criteria                   | CONTAINS                    |
|       match_str[1]                     | Authorization               |
|     action                             | LOG_FIELD_MASKOFF           |