Microsoft身份平台(v2.0)端点支持对各种现代应用程序体系结构进行身份验证。所有架构均基于行业标准协议OAuth 2.0和OpenID Connect。通过将身份验证库用于Microsoft身份平台,应用程序对身份进行身份验证并获取令牌以访问受保护的API。
本文介绍了身份验证流及其使用的应用程序场景。
应用类别
可以从几种类型的应用程序中获取令牌,包括:
- 网络应用
- 移动端应用
- 桌面应用
- Web API
令牌也可以由在没有浏览器或在物联网(IoT)上运行的应用程序获取。
以下各节讲述了支持的各类应用程序。
受保护的资源与客户端应用程序
身份验证方案涉及两个活动:
- 获取受保护的Web API的安全令牌:我们建议您使用Microsoft支持的客户端库来获取令牌。我们建议您最好使用Microsoft身份验证库(MSAL)。
- 受保护的Web API或Web应用程序:保护这些资源的一项挑战是如何验证安全令牌。而在一些平台上,Microsoft已经提供了相关的中间件库,供开发所用。
有用户或无用户
大多数身份验证方案都代表登录用户获取令牌。
但是,也有守护程序。在这些情况下,应用程序无需用户即可代表自己获取令牌。
单页,公共客户端和机密客户端应用程序
可以通过多种类型的应用程序获取安全令牌。这些应用程序倾向于分为以下三个类别。每个都与不同的库和对象一起使用。
- 单页应用程序:也称为SPA,它们是Web应用程序,其中通过在浏览器中运行的JavaScript或TypeScript应用程序获取令牌。许多现代应用程序的前端都有一个单页面应用程序,该应用程序主要是用JavaScript编写的。该应用程序通常使用Angular,React或Vue之类的框架。MSAL.js是唯一支持单页应用程序的Microsoft身份验证库。
-
公用客户端应用程序:此类别的应用程序(例如以下类型)始终会登录用户:
- 代表登录用户调用Web API的桌面应用
- 行动应用程式
- 在没有浏览器的设备上运行的应用程序,例如在IoT上运行的应用程序
-
机密客户端应用程序:此类别的应用程序包括:
- 调用Web API的Web应用
- 调用Web API的Web API
- 守护程序应用程序,即使实现为控制台服务(如Linux守护程序或Windows服务)
登录受众
可用的身份验证流程因登录用户的不同而不同。某些流程仅适用于工作或学校帐户。其他帐户可用于工作或学校帐户以及个人Microsoft帐户。
有关更多信息,请参阅支持的帐户类型[3P]。
应用场景
Microsoft身份平台端点支持以下应用程序体系结构的身份验证:
- 单页应用
- 网络应用
- Web API
- 行动应用程式
- 本机应用
- 守护程序
- 服务器端应用
应用程序使用不同的身份验证流程登录用户并获取令牌以调用受保护的API。
单页申请
许多现代的Web应用程序都是作为客户端单页应用程序构建的。这些应用程序使用JavaScript或Angular,Vue.js和React.js之类的框架。这些应用程序在Web浏览器中运行。
单页应用程序在身份验证特征方面与传统的服务器端Web应用程序不同。通过使用Microsoft身份平台,单页应用程序可以登录用户并获取令牌以访问后端服务或Web API。
有关更多信息,请参见单页应用程序。
登录用户的Web应用
为了帮助保护登录用户的Web应用程序,请执行以下操作:
- 如果使用.NET开发,则可以将ASP.NET或ASP.NET Core与ASP.NET OpenID Connect中间件一起使用。保护资源涉及验证安全令牌,这是由.NET的IdentityModel扩展而不是MSAL库完成的。
- 如果您使用Node.js开发,则使用Passport.js。
有关更多信息,请参阅登录用户的Web应用程序。
登录用户并代表用户调用Web API的Web应用
要代表用户从Web应用程序调用Web API,请使用授权代码流并将获取的令牌存储在令牌缓存中。必要时,MSAL刷新令牌,控制器以静默方式从缓存中获取令牌。
有关更多信息,请参阅调用Web API的Web应用程序。
代表登录用户调用Web API的桌面应用
要使桌面应用程序调用用于登录用户的Web API,请使用MSAL的交互式令牌获取方法。使用这些交互式方法,您可以控制登录UI体验。MSAL使用Web浏览器进行此交互。
通过Windows域或Azure Active Directory(Azure AD)加入计算机的Windows托管应用程序还有另一种可能性。这些应用程序可以使用集成Windows身份验证以静默方式获取令牌。
在没有浏览器的设备上运行的应用程序仍可以代表用户调用API。要进行身份验证,用户必须在具有Web浏览器的另一台设备上登录。此方案要求您使用设备代码流。
尽管我们不建议您使用它,但是用户名/密码流在公共客户端应用程序中可用。在某些场景(例如DevOps)中仍然需要此流程。
使用用户名/密码流会限制您的应用程序。例如,应用程序无法登录需要使用Azure AD中的多因素身份验证或条件访问工具的用户。您的应用程序也无法从单点登录中受益。使用用户名/密码流的身份验证违反了现代身份验证的原理,仅出于遗留原因才提供身份验证。
在桌面应用程序中,如果希望令牌缓存持久存在,则可以自定义令牌缓存序列化。通过实现双重令牌缓存序列化,可以使用向后兼容和向前兼容的令牌缓存。这些令牌支持前几代身份验证库。特定的库包括适用于.NET的Azure AD身份验证库(ADAL.NET)版本3和版本4。
有关更多信息,请参阅调用Web API的桌面应用程序。
代表互动用户调用Web API的移动应用
与桌面应用程序类似,移动应用程序调用MSAL的交互式令牌获取方法来获取用于调用Web API的令牌。
默认情况下,MSAL iOS和MSAL Android使用系统Web浏览器。但是,您可以指导他们改用嵌入式Web视图。具体取决于移动平台:通用Windows平台(UWP),iOS或Android。
某些情况(例如涉及与设备ID或设备注册相关的条件访问的情况)要求在设备上安装代理。代理的示例包括Android上的Microsoft Company Portal和Android和iOS上的Microsoft Authenticator。MSAL现在可以与经纪人进行交互。有关代理的更多信息,请参阅在Android和iOS上利用代理。
有关更多信息,请参阅调用Web API的移动应用程序。
注意
在Xamarin上使用MSAL.iOS,MSAL.Android或MSAL.NET的移动应用程序可以对其应用应用保护策略。例如,策略可能会阻止用户复制受保护的文本。该移动应用由Intune管理,并被Intune识别为托管应用。有关更多信息,请参见Microsoft Intune App SDK概述。
所述Intune的应用程序SDK从MSAL库和相互作用天青AD自身分离。
受保护的Web API
您可以使用Microsoft身份平台端点来保护Web服务(如应用程序的RESTful Web API)的安全。通过访问令牌调用受保护的Web API。令牌有助于保护API的数据并验证传入的请求。Web API的调用者将访问令牌附加在HTTP请求的授权标头中。
如果要保护ASP.NET或ASP.NET Core Web API,则需要验证访问令牌。对于此验证,您使用ASP.NET JWT中间件。验证是通过.NET库的IdentityModel扩展完成的,而不是通过MSAL.NET完成的。
有关更多信息,请参阅受保护的Web API。
代表用户调用另一个Web API的Web API
为了让受保护的Web API代表用户调用另一个Web API,您的应用需要获取下游Web API的令牌。此类呼叫有时称为“ 服务到服务”呼叫。调用其他Web API的Web API需要提供自定义缓存序列化。
有关更多信息,请参见调用Web API的Web API。
守护程序应用程序,以守护程序的名称调用Web API
具有长期运行的流程或无需用户交互即可运行的应用程序还需要一种访问安全Web API的方法。这样的应用程序可以使用该应用程序的身份进行身份验证并获取令牌。该应用通过使用客户端机密或证书来证明其身份。
您可以编写此类守护程序,以使用MSAL中的客户端凭据获取方法为调用应用程序获取令牌。这些方法要求您将客户端**添加到Azure AD中的应用程序注册中。然后,该应用程序与调用的守护程序共享机密。此类机密的示例包括应用程序密码,证书声明和客户端声明。
有关更多信息,请参阅调用Web API的Daemon应用程序。
方案和支持的身份验证流程
您使用身份验证流来实现请求令牌的应用程序方案。应用程序场景和身份验证流之间没有一对一的映射。
涉及获取令牌的方案也映射到OAuth 2.0身份验证流。有关更多信息,请参阅Microsoft身份平台上的OAuth 2.0和OpenID Connect协议。
场景 | 详细的方案演练 | OAuth 2.0流程和授权 | 用户类型 |
单页应用 | 单页应用 | 隐含的 | 工作或学校帐户,个人帐户和Azure Active Directory B2C(Azure AD B2C) |
登录用户的Web应用 | 登录用户的Web应用 | 授权码 | 工作或学校帐户,个人帐户和Azure AD B2C |
调用Web API的Web应用 | 调用Web API的Web应用 | 授权码 | 工作或学校帐户,个人帐户和Azure AD B2C |
调用Web API的桌面应用 | 调用Web API的桌面应用 | 使用互动 授权码 与PKCE | 工作或学校帐户,个人帐户和Azure AD B2C |
集成Windows身份验证 | 工作或学校帐户 | ||
资源所有者密码 | 工作或学校帐户以及Azure AD B2C | ||
设备代码 | 工作或学校帐户 | ||
调用Web API的移动应用 | 使用互动 授权码 与PKCE | 工作或学校帐户,个人帐户和Azure AD B2C | |
资源所有者密码 | 工作或学校帐户以及Azure AD B2C | ||
调用Web API的守护程序 | 客户凭证 | 没有用户且仅在Azure AD组织中使用的仅应用程序权限 | |
调用Web API的Web API | 代表 | 工作或学校帐户以及个人帐户 |
方案和支持的平台和语言
Microsoft身份验证库支持多种平台:
- 的JavaScript
- .NET Framework
- .NET核心
- Windows 10 / UWP
- Xamarin.iOS
- Xamarin.Android
- 本机iOS
- 苹果系统
- 本机Android
- 爪哇
- 蟒蛇
您还可以使用各种语言来构建应用程序。
注意
某些应用程序类型并非在每个平台上都可用。
在下表的Windows列中,每次提到.NET Core时,.NET Framework也是可能的。为了避免桌子混乱,省略了后者。
情境 |
视窗 |
的Linux |
苹果电脑 |
的iOS |
安卓系统 |
单页应用 |
MSAL.js |
MSAL.js |
MSAL.js |
MSAL.js |
MSAL.js |
登录用户的Web应用 |
ASP.NET核心 |
ASP.NET核心 |
ASP.NET核心 |
|
|
调用Web API的Web应用
|
ASP.NET Core + MSAL.NET MSAL Java Flask + MSAL Python |
ASP.NET Core + MSAL.NET MSAL Java Flask + MSAL Python |
ASP.NET Core + MSAL.NET MSAL Java Flask + MSAL Python |
|
|
调用Web API的桌面应用
|
MSAL.NET MSAL Java MSAL Python |
MSAL.NET MSAL Java MSAL Python |
MSAL.NET MSAL Java MSAL Python MSAL.objc |
|
|
调用Web API的移动应用 |
MSAL.NET
MSAL.NET |
|
|
MSAL.objc |
微软MSAL |
守护程序 |
MSAL.NET MSAL Java MSAL Python |
MSAL.NET MSAL Java MSAL Python |
MSAL.NET MSAL Java MSAL Python |
|
|
调用Web API的Web API
|
ASP.NET Core + MSAL.NET MSAL Java MSAL Python |
ASP.NET Core + MSAL.NET MSAL Java MSAL Python |
ASP.NET Core + MSAL.NET MSAL Java MSAL Python |
|
|