探索 Microsoft 身份验证库
借助 Microsoft 身份验证库 (MSAL),开发人员能够从 Microsoft 标识平台获取安全令牌,以便对用户进行身份验证并访问受保护的 Web API。 它可用于提供对 Microsoft Graph、其他 Microsoft API、第三方 Web API 或你自己的 Web API MSAL 的安全访问,且支持许多不同的应用程序体系结构和平台,包括 .NET、JavaScript、Java、Python、Android 和 iOS。
MSAL 为你提供了许多获取令牌的方法,将一致的 API 用于许多平台。 使用 MSAL 具有以下好处:
- 无需直接在应用程序中对协议使用 OAuth 库或代码。
- 代表用户或代表应用程序获取令牌(如果适用于平台)。
- 维护令牌缓存,并在即将过期时为你刷新令牌。 你不需要自行处理令牌过期。
- 可帮助你指定你希望应用程序登录的受众。
- 可帮助你通过配置文件设置应用程序。
- 可显示可操作异常、日志和遥测,从而帮助你对应用进行故障排除。
应用程序类型和方案
在 MSAL 中,可从许多应用程序类型获取令牌:Web 应用程序、Web API、单页应用 (JavaScript)、移动和本机应用程序以及守护程序和服务器端应用程序。 MSAL 目前支持下表中列出的平台和框架。
库 | 支持的平台和框架 |
---|---|
适用于 Android 的 MSAL | Android |
MSAL Angular | 采用 Angular 和 Angular.js 框架的单页应用 |
适用于 iOS 和 macOS 的 MSAL | iOS 和 macOS |
MSAL Go(预览版) | Windows、macOS、Linux |
MSAL Java | Windows、macOS、Linux |
MSAL.js | JavaScript/TypeScript 框架,例如 Vue.js、Ember.js 或 Durandal.js |
MSAL.NET | .NET Framework、.NET、.NET MAUI、WINUI、Xamarin Android、Xamarin iOS、通用 Windows 平台 |
MSAL Node | Express 的 Web 应用、Electron 的桌面应用、跨平台控制台应用 |
MSAL Python | Windows、macOS、Linux |
MSAL React | 采用 React 和基于 React 的库(Next.js、Gatsby.js)的单页应用 |
身份验证流
下表显示了 Microsoft 身份验证库 (MSAL) 提供的一些不同的身份验证流。 这些流可用于各种应用程序方案。
身份验证流 | 允许 | 支持的应用程序类型 |
---|---|---|
授权代码 | 代表用户进行用户登录并访问 Web API。 | 桌面版、移动版、单页应用 (SPA)(需要 PKCE)、Web 版 |
客户端凭据 | 使用应用程序本身的标识访问 Web API。 通常用于服务器到服务器的通信,以及无需用户交互的自动化脚本。 | 守护程序 |
设备代码 | 在智能电视和 IoT 设备等输入受限的设备上代表用户进行用户登录并访问 Web API。 也由命令行接口 (CLI) 应用程序使用。 | 桌面型、移动型 |
隐式授权 | 代表用户进行用户登录并访问 Web API。 不再建议使用隐式授权流 - 请改用带 PKCE 的授权代码。 | 单页应用 (SPA)、Web 版 |
代理 (OBO) | 代表用户从“上游”Web API 访问“下游”Web API。 用户的标识和委托的权限将从上游 API 传递到下游 API。 | Web API |
用户名/密码 (ROPC) | 允许应用程序通过直接处理用户密码来登录用户。 不建议使用 ROPC 流。 | 桌面型、移动型 |
集成 Windows 身份验证 (IWA) | 允许已加入域或已加入 Microsoft Entra 的计算机上的应用程序静默获取令牌(无需用户进行任何 UI 交互)。 | 桌面型、移动型 |
公共客户端和机密客户端应用程序
Microsoft 身份验证库 (MSAL) 定义两种类型的客户端;公共客户端和机密客户端。 客户端是一种软件实体,具有标识提供者分配的唯一标识符。 客户端类型因其与授权服务器进行安全身份验证的能力以及保存敏感的身份证明信息(从而使用户无法在其访问范围内访问或知道该信息)的能力而异。
在检查给定客户端的公共或机密性质时,我们评估的是该客户端向授权服务器证明其标识的能力。 这一点非常重要,因为授权服务器必须能够信任客户端的标识才能颁发访问令牌。
公共客户端应用程序在桌面、无浏览器 API、移动或客户端浏览器应用等设备上运行。 不能信任它们安全地保守应用程序机密,因此它们只能代表用户访问 Web API。 任何时候,都可以将给定应用程序的源代码或经过编译的字节码传输到任何可供不受信任的相关方对其进行读取、反汇编或以其他方式进行检查的地方。 由于它们还仅支持公共客户端流,并且不能保存配置时机密,因此它们不能拥有客户端密码。
机密客户端在服务器上,例如如 Web 应用、Web API 应用,或服务/守护程序应用。 它们被认为难以被用户或攻击者访问,因此可以充分保存配置时机密来断言其身份证明。 客户端 ID 通过 Web 浏览器公开,但机密仅在传回通道中传递,永远不会直接公开。