Microsoft 标识平台的应用程序类型
Microsoft 标识平台支持各种新式应用体系结构的身份验证,所有这些体系结构都基于行业标准协议 OAuth 2.0 或 OpenID Connect。 本指南介绍可以通过 Microsoft 标识平台生成的应用的类型,而不考虑首选语言或平台。 该信息旨在帮助你在开始处理应用程序方案中的代码之前了解高级方案。
基础知识
必须在 Microsoft Entra 管理中心应用注册中注册使用 Microsoft 标识平台的每个应用。 应用注册过程将收集这些值并将其分配给应用:
- 用于唯一标识应用的“应用程序(客户端) ID”。
- 用于将响应定向回应用的重定向 URI
- 其他一些特定于方案的值,例如支持的帐户类型
有关详细信息,请了解如何注册应用。
注册应用后,应用将通过向终结点发送请求来与 Microsoft 标识平台通信。 我们提供开源框架和库,用于处理这些请求的详细信息。 还可以通过创建对这些终结点的请求,选择自行实现身份验证逻辑:
https://login.partner.microsoftonline.cn/common/oauth2/v2.0/authorize
https://login.partner.microsoftonline.cn/common/oauth2/v2.0/token
Microsoft 标识平台支持的应用类型为;
- 单页应用 (SPA)
- Web 应用
- Web API
- 移动和本机应用
- 服务、守护程序、脚本
单页应用
许多新式应用包含一个主要以 JavaScript 编写的单页应用 (SPA) 前端,通常使用 Angular、React 或 Vue 之类的框架。 Microsoft 标识平台支持这些应用的方式是使用 OpenID Connect 协议进行身份验证,以及使用 OAuth 2.0 定义的两种授权类型之一。 在开发 SPA 时,请将授权代码流与代码交换证明密钥 (PKCE) 配合使用。 此流比不再推荐使用的隐式流更安全。 有关更多信息,请参阅首选授权代码流。
流程图演示了 OAuth 2.0 授权代码授予流(省略了有关 PKCE 的详细信息),其中应用从 Microsoft 标识平台 authorize
终结点接收代码,并使用跨站点 Web 请求将其兑换为访问令牌和刷新令牌。 对于单页应用程序,访问令牌的有效期为 1 小时,过期后,必须使用刷新令牌请求另一个代码。 除了访问令牌外,通常还通过相同的流和/或单独的 OpenID Connect 请求(此处未显示)来请求 id_token
(表示已登录到客户端应用程序的用户)。
要查看此操作,请参阅快速入门:在单页应用程序 (SPA) 中登录用户,并使用 JavaScript 调用 Microsoft Graph API。
Web 应用
对于通过浏览器访问的 Web 应用(.NET、PHP、Java、Ruby、Python、Node 等),可以使用 OpenID Connect 来执行用户登录。 在 OpenID Connect 中,Web 应用接收 ID 令牌。 ID 令牌是一个安全令牌,用于验证用户的标识并以声明形式提供有关用户的信息:
// Partial raw ID token
abC1dEf2Ghi3jkL4mNo5Pqr6stU7vWx8Yza9...
// Partial content of a decoded ID token
{
"name": "Casey Jensen",
"email": "casey.jensen@partner.onmschina.cn",
"oid": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
...
}
若要更详细地了解 Microsoft 标识平台中使用的不同类型的令牌,请查看访问令牌参考和 id_token 参考。
在 Web 服务器应用中,登录身份验证流采用以下高级步骤:
使用从 Microsoft 标识平台接收的公共签名密钥验证 ID 令牌便可确保用户的标识正确。 设置会话 Cookie,在后续页面请求中将其用于识别用户。
构建用于将用户登录并调用 Microsoft Graph API 的 ASP.NET Core Web 应用,从而了解更多信息。
除简单的登录之外,Web 服务器应用可能还需要访问其他 Web 服务,例如表述性状态转移 (REST) API。 在这种情况下,Web 服务器应用可以使用 OAuth 2.0 授权代码流参与合并的 OpenID Connect 和 OAuth 2.0 流。 有关此场景的详细信息,请参阅代码示例。
Web API
可使用 Microsoft 标识平台来保护 Web 服务,例如应用的 RESTful Web API。 Web API 可以在多种平台和语言中实现。 它们还可以使用 Azure Functions 中的 HTTP 触发器来实现。 Web API 使用 OAuth 2.0 访问令牌(而不是 ID 令牌和会话 Cookie)来保护数据并对传入的请求进行身份验证。
Web API 调用方会在 HTTP 请求的授权标头中附加一个访问令牌,如下所示:
GET /api/items HTTP/1.1
Host: www.mywebapi.com
Authorization: Bearer abC1dEf2Ghi3jkL4mNo5Pqr6stU7vWx8Yza9...
Accept: application/json
...
Web API 使用此访问令牌来验证 API 调用方的标识,并从访问令牌中编码的声明里提取调用方的相关信息。 有关 Microsoft 标识平台中使用的不同类型令牌的进一步详细信息,请参阅《访问令牌》参考和《ID 令牌》参考。
Web API 可让用户通过公开权限(也称为范围)来选择添加/排除特定的功能或数据。 为了使调用应用能够获取某个范围的权限,用户必须在执行流的过程中同意该范围。 Microsoft 标识平台向用户请求权限,并将这些权限记录到 Web API 收到的所有访问令牌中。 Web API 验证每次调用中接收的访问令牌,并执行授权检查。
Web API 可以从各种应用接收访问令牌,其中包括 Web 服务器应用、桌面和移动应用、单页应用、服务器端守护程序,甚至其他 Web API。 Web API 的高级流如下所示:
若要了解如何使用 OAuth2 访问令牌来保护 Web API,请查看受保护的 Web API 教程中提供的 Web API 代码示例。
在许多情况下,Web API 还需要对由 Microsoft 标识平台保护的其他下游 Web API 发出出站请求。 为执行此操作,Web API 可以利用代理 (OBO) 流,它会允许 Web API 将传入的访问令牌交换为要在出站请求中使用的另一个访问令牌。 有关详细信息,请参阅 Microsoft 标识平台和 OAuth 2.0 代理流。
移动和本机应用
安装在设备中的应用(如移动和桌面应用)通常需要访问用于存储数据和代表用户执行各种功能的后端服务或 Web API。 这些应用可以使用 OAuth 2.0 授权代码流将登录凭据和授权添加到后端服务。
在此流中,应用在用户登录时从 Microsoft 标识平台接收授权代码。 授权代码表示应用有权代表登录用户调用后端服务。 应用可以通过在后台交换授权代码获得 OAuth 2.0 访问令牌和刷新令牌。 应用可以使用访问令牌在 HTTP 请求中向 Web API 进行身份验证,并可以在旧的访问令牌过期时,用刷新令牌获取新的访问令牌。
注意
如果应用程序使用默认系统 webview,请查看 Microsoft Entra 身份验证和授权错误代码中有关“确认我的登录”功能和错误代码 AADSTS50199
的信息。
服务器、守护程序和脚本
对于包含长时间运行的进程或无需用户交互便可操作的应用,还需要通过其他方法来访问受保护的资源,例如 Web API。 这些应用可以通过 OAuth 2.0 客户端凭据流使用应用的标识(而不是用户的委派标识)来进行身份验证和获取令牌。 可以使用客户端机密或证书证明应用的身份。 有关详细信息,请参阅使用 Microsoft 标识平台的 .NET 守护程序控制台应用程序。
在此流中,应用通过直接与 /token
终结点交互来获取访问权限:
若要生成守护程序,请参阅客户端凭据文档,或者尝试 .NET 示例应用。