Microsoft 标识平台中的 OAuth 2.0 和 OpenID Connect (OIDC)

无需在协议级别了解 OAuth 或 OpenID Connect (OIDC) 就可以使用 Microsoft 标识平台。 但是,当你使用标识平台向应用添加身份验证时,将会遇到协议术语和概念。 当你使用 Microsoft Entra 管理中心、我们的文档和身份验证库时,了解一些基础知识有助于集成和整体体验。

OAuth 2.0 中的角色

OAuth 2.0 和 OpenID Connect 身份验证和授权交换通常涉及四方。 这些交换通常称为身份验证流

显示 OAuth 2.0 角色的关系图

  • 授权服务器 - Microsoft 标识平台是授权服务器。 它也称为标识提供者(简称 IdP),可安全地处理最终用户的信息、其访问权限以及身份验证流中各方之间的信任关系。 在用户登录(身份验证)后,授权服务器颁发的安全令牌可供应用和 API 用于授予、拒绝或撤销对资源的访问权限(授权)。

  • 客户端 - OAuth 交换中的客户端是请求访问受保护资源的应用程序。 客户端可以是在服务器上运行的 Web 应用、在用户的 Web 浏览器中运行的单页 Web 应用或调用另一个 Web API 的 Web API。 通常会看到称为客户端应用程序、应用程序或应用的客户端。

  • 资源所有者 - 身份验证流中的资源所有者通常是 OAuth 术语中的应用程序用户或最终用户。 最终用户“拥有”受保护的资源(用户数据),你的应用代表最终用户进行访问。 资源所有者可以授予或拒绝你的应用(客户端)访问其拥有的资源的权限。 例如,你的应用可能会调用外部系统的 API,从某个用户在该系统上的个人资料获取该用户的电子邮件地址。 其个人资料数据是最终用户在外部系统中拥有的资源,最终用户可以同意或拒绝你的应用访问其数据的请求。

  • 资源服务器 - 资源服务器托管资源所有者的数据,或提供对这些数据的访问权限。 资源服务器通常是一个面向数据存储的 Web API。 资源服务器依赖于授权服务器来执行身份验证,并根据授权服务器颁发的持有者令牌中的信息来授予或拒绝对资源的访问权限。

令牌

身份验证流中的各方使用持有者令牌来确保、确认和验证某个主体(用户、主机或服务)并授予或拒绝对受保护资源的访问权限(授权)。 Microsoft 标识平台中的持有者令牌已格式化为 JSON Web 令牌 (JWT)。

标识平台使用三种类型的持有者令牌作为安全令牌

  • 访问令牌 - 访问令牌由授权服务器颁发给客户端应用程序。 客户端将访问令牌传递给资源服务器。 访问令牌包含授权服务器授予客户端的权限。

  • ID 令牌 - ID 令牌由授权服务器颁发给客户端应用程序。 客户端在登录用户时使用 ID 令牌,可获取有关用户的基本信息。

  • 刷新令牌 - 客户端使用刷新令牌(简称 RT)从授权服务器请求新的访问令牌和 ID 令牌。 代码应将刷新令牌及其字符串内容视为敏感数据,因为它们仅供授权服务器使用。

应用注册

客户端应用需要一种方法来信任 Microsoft 标识平台颁发给自己的安全令牌。 建立信任的第一步是注册应用。 当你注册应用时,标识平台会自动为其分配一些值,而其他值则由你根据应用程序的类型进行配置。

两个最常引用的应用注册设置为:

  • 应用程序(客户端)ID - 也称为“应用程序 ID”和“客户端 ID”,此值由标识平台分配给你的应用。 客户端 ID 可对标识平台中的应用进行唯一标识,包含在平台颁发的安全令牌中。
  • 重定向 URI - 授权服务器使用重定向 URI,将资源所有者的用户代理(Web 浏览器、移动应用)定向到另一个目标(在完成其交互后)。 例如,在最终用户通过授权服务器进行身份验证之后。 并非所有客户端类型都使用重定向 URI。

应用的注册还保存有关身份验证和授权终结点的信息,这些信息可以在代码中用于获取 ID 和访问令牌。

终结点

Microsoft 标识平台使用 OAuth 2.0 和 OpenID Connect (OIDC) 1.0 的符合标准的实现提供身份验证和授权服务。 符合标准的授权服务器(例如标识平台)提供一组 HTTP 终结点,供身份验证流中的各方用于执行流。

当你注册或配置应用时,系统会自动生成应用的终结点 URI。 在应用的代码中使用的终结点取决于应用程序的类型以及应支持的标识(帐户类型)。

两个常用的终结点是授权终结点令牌终结点。 下面是 authorizetoken 终结点的示例:

# Authorization endpoint - used by client to obtain authorization from the resource owner.
https://login.microsoftonline.com/<issuer>/oauth2/v2.0/authorize
# Token endpoint - used by client to exchange an authorization grant or refresh token for an access token.
https://login.microsoftonline.com/<issuer>/oauth2/v2.0/token

# NOTE: These are examples. Endpoint URI format may vary based on application type,
#       sign-in audience, and Azure cloud instance (global or national cloud).

#       The {issuer} value in the path of the request can be used to control who can sign into the application. 
#       The allowed values are **common** for both Microsoft accounts and work or school accounts, 
#       **organizations** for work or school accounts only, **consumers** for Microsoft accounts only, 
#       and **tenant identifiers** such as the tenant ID or domain name.

要查找已注册的应用程序的终结点,请在 Microsoft Entra 管理中心导航到:

“标识”>“应用程序”>“应用注册”><YOUR-APPLICATION>>“终结点”

后续步骤

接下来,了解每个应用程序类型使用的 OAuth 2.0 身份验证流,以及可在应用中用于执行这些流的库:

我们强烈建议不要手工编写你自己的库或原始 HTTP 调用来执行身份验证流。 Microsoft 身份验证库更安全且更容易。 但是,如果你的方案阻止你使用我们的库,或者你只是想要了解有关 Microsoft 标识平台实现的详细信息,我们有协议参考: