什么是作用域 (Scope)?
在 OAuth 2.0 和 OpenID Connect (OIDC) 协议中,作用域 (Scope) 是一种限制应用对用户资源访问的机制。它定义了应用程序向用户请求的权限。
作用域 (Scope) 由授权服务器定义,并表示为字符串。当应用程序请求访问用户资源时,它会在授权请求中指定所需的作用域 (Scope)。用户随后将在授权过程中被提示授予或拒绝这些权限。
为什么使用作用域 (Scope)?
- 细粒度访问控制:作用域 (Scope) 允许应用程序仅请求执行特定操作所需的权限,降低未经授权访问的风险。
- 用户同意:作用域 (Scope) 帮助用户了解应用程序将访问哪些数据以及访问的原因。
- 安全性:作用域 (Scope) 有助于防止应用程序超出其访问权限,从而增强用户数据的安全性。
作用域 (Scope) 如何运作?
当应用程序启动 OAuth 2.0 / OIDC 授权流程时,它会在授权请求中包含作用域 (Scope) 列表。授权服务器随后向用户呈现一个同意屏幕,列出请求的作用域 (Scope)。用户可以选择授予或拒绝对每个作用域 (Scope) 的访问。这一过程通常用于需要访问用户资源的第三方应用程序。
或者,如果应用程序被授权服务器信任,用户可能不会被提示同意,而是自动同意并授予所有请求的作用域 (Scope)。
定义作用域 (Scope)
作用域 (Scope) 通常由 API 提供者定义。它们可以是:
- 标准作用域 (Standard scopes):由 OAuth 2.0 规范定义的常用作用域 (Scope),由不同应用程序和服务共享。例如
openid
、profile
、email
。 - 自定义作用域 (Custom scopes):特定于某个应用程序或服务,根据其独特需求定制。例如
read:orders
、write:comments
。
作用域 (Scope) 在 OIDC 和身份管理中的用途
作用域 (Scope) 可以用于 OIDC 的多个方面,包括但不限于:
- 身份验证 (Authentication):作用域 (Scope) 可用于在身份验证过程中请求特定的用户信息。例如
profile
、email
。 - 授权 (Authorization):作用域 (Scope) 可用于请求访问特定资源或执行特定操作。例如
read:orders
、write:comments
。 - 同意 (Consent):作用域 (Scope) 在同意屏幕中呈现给用户,以告知他们应用程序请求的权限。
- 令牌签发 (Token issuance):作用域 (Scope) 包含在令牌响应中,以指示授予应用程序的权限。
- 令牌验证 (Token validation):作用域 (Scope) 可用于在应用程序呈现令牌以访问受保护资源时验证其访问权。
- 资源服务器 (Resource server):资源服务器可以使用作用域 (Scope) 来根据授予应用程序的权限实施访问控制策略。
- 用户资料 (User profile):作用域 (Scope) 可用于请求超出基本声明的其他用户资料信息。
最佳实践
- 请求最小作用域 (Minimal scopes):始终请求应用程序功能所需的最小作用域 (Scope) 集。这可以最大限度地降低过度授权的风险并增强用户信任。
- 解释作用域 (Scope) 用途:向用户明确解释每个作用域 (Scope) 的必要性。透明度有助于获得用户同意。
- 尽可能使用标准作用域 (Standard scopes):利用标准作用域 (Scope) 以确保兼容性并减少复杂性。