本文使用一个示例 ASP.NET Web 应用,说明如何向 Web 应用添加 Azure Active Directory B2C (Azure AD B2C) 身份验证。
重要
本文引用的示例 ASP.NET Web 应用不能用于调用 REST API,因为此应用会返回 ID 令牌,而非访问令牌。 有关可以调用 REST API 的 Web 应用,请参阅使用 Azure AD B2C 保护通过 ASP.NET Core 生成的 Web API。
OpenID Connect (OIDC) 是在 OAuth 2.0 上构建的身份验证协议。 可以使用 OIDC 安全地将用户登录到应用程序。 此 Web 应用示例使用 Microsoft Identity Web。 Microsoft Identity Web 是一组 ASP.NET Core 库,可简化向 Web 应用添加身份验证和授权支持的过程。
登录流涉及以下步骤:
- 用户前往 Web 应用,并选择“登录”。
- 应用发起身份验证请求,并将用户重定向到 Azure AD B2C。
- 用户注册或登录并重置密码。 或者,用户也可以使用社交帐户登录。
- 用户成功登录后,Azure AD B2C 向应用返回 ID 令牌。
- 应用验证 ID 令牌,读取声明,并向用户返回安全页。
当 ID 令牌过期或应用会话失效时,应用会发出新身份验证请求,并将用户重定向到 Azure AD B2C。 如果 Azure AD B2C SSO 会话处于活动状态,Azure AD B2C 会发出访问令牌,但不会提示用户再次登录。 如果 Azure AD B2C 会话过期或无效,则系统会提示用户重新登录。
注销流程涉及以下步骤:
- 用户从应用中注销。
- 应用清除其会话对象,并且身份验证库清除其令牌缓存。
- 应用将用户定向到 Azure AD B2C 注销终结点,以终止 Azure AD B2C 会话。
- 用户被重定向回应用。
运行以下系统之一的计算机:
- 具有 ASP.NET 和 Web 开发工作负载的 Visual Studio 2022 17.0 或更高版本
- .NET 6.0 SDK
当用户尝试登录你的应用时,该应用会通过用户流向授权终结点发起身份验证请求。 用户流定义并控制用户体验。 用户完成用户流后,Azure AD B2C 会生成一个令牌,然后将用户重定向回应用程序。
请创建用户流或自定义策略(如果你尚未这样做)。 重复这些步骤以按如下所述创建三个单独的用户流:
- 组合的“登录和注册”用户流,例如
susi
。 此用户流还支持“忘记密码”体验。 - “个人资料编辑”用户流,例如
edit_profile
。 - “密码重置”用户流,例如
reset_password
。
Azure AD B2C 将在用户流名称前面追加 B2C_1_
。 例如,susi
重命名为 B2C_1_susi
。
若要让应用程序使用 Azure AD B2C 登录,请在 Azure AD B2C 目录中注册应用。 注册应用会在应用与 Azure AD B2C 之间建立信任关系。
在应用注册过程中,要指定重定向 URI。 重定向 URI 是用户通过 Azure AD B2C 完成身份验证之后 Azure AD B2C 将用户重定向到的终结点。 此应用注册过程会生成应用程序 ID(也称为“客户端 ID”),作为该应用的唯一标识 。 注册应用后,Azure AD B2C 将使用应用程序 ID 和重定向 URI 来创建身份验证请求。
若要创建 Web 应用注册,请使用以下步骤:
登录 Azure 门户。
如果有权访问多个租户,请选择顶部菜单中的“设置”图标,从“目录 + 订阅”菜单中切换到你的 Azure AD B2C 租户。
在 Azure 门户中,搜索并选择“Azure AD B2C”。
选择“应用注册”,然后选择“新建注册” 。
在“名称”下,输入应用程序的名称(例如 webapp1)。
在“支持的帐户类型”下,选择“任何标识提供者或组织目录中的帐户(用于通过用户流对用户进行身份验证)” 。
在“重定向 URI”下,选择“Web”,然后在 URL 框中输入
https://localhost:44316/signin-oidc
。在“管理”下,选择“身份验证”,转到“隐式授权和混合流”,选中“ID 令牌(用于隐式和混合流)”复选框。
在“权限”下,选中“授予对 OpenID 和脱机访问权限的管理员许可”复选框。
选择“注册” 。
选择“概述”。
记录“应用程序(客户端) ID”,以便在稍后配置 Web 应用程序时使用。
下载 zip 文件,或从 GitHub 克隆示例 Web 应用。
git clone https://github.com/Azure-Samples/active-directory-aspnetcore-webapp-openidconnect-v2
将示例文件提取到文件夹,该文件夹路径的总字符长度须不得超过 260 个字符。
在示例文件夹中的 1-WebApp-OIDC/1-5-B2C/ 文件夹下,使用 Visual Studio 或 Visual Studio Code 打开 WebApp-OpenIDConnect-DotNet.csproj 项目。
在项目根文件夹下,打开 appsettings.json 文件。 此文件包含有关 Azure AD B2C 标识提供者的信息。 更新以下应用设置属性:
部分 | 密钥 | 值 |
---|---|---|
AzureAdB2C | 实例 | Azure AD B2C 租户名称的第一部分(例如 https://contoso.b2clogin.cn )。 |
AzureAdB2C | 域 | Azure AD B2C 租户的完整租户名称(例如 contoso.partner.onmschina.cn )。 |
AzureAdB2C | ClientId | 步骤 2 中的 Web 应用应用程序(客户端)ID。 |
AzureAdB2C | SignUpSignInPolicyId | 用户流,或在步骤 1 中创建的自定义策略。 |
你的最终配置文件应类似于下面的 JSON:
"AzureAdB2C": {
"Instance": "https://contoso.b2clogin.cn",
"Domain": "contoso.partner.onmschina.cn",
"ClientId": "<web-app-application-id>",
"SignedOutCallbackPath": "/signout/<your-sign-up-in-policy>",
"SignUpSignInPolicyId": "<your-sign-up-in-policy>"
}
生成并运行该项目。
转到
https://localhost:44316
。选择“注册/登录”。
完成注册或登录过程。
身份验证成功后,你会在导航栏中看到显示名称。 若要查看 Azure AD B2C 令牌返回到应用的声明,请选择“声明”。
在生产应用程序中,应用注册重定向 URI 通常是运行应用的可公开访问的终结点,比如 https://contoso.com/signin-oidc
。
可以随时在注册的应用程序中添加和修改重定向 URI。 重定向 URI 存在以下限制:
- 回复 URL 必须以方案
https
开头。 - 回复 URL 区分大小写。 其大小写必须与正在运行的应用程序的 URL 路径的大小写匹配。
- 了解有关代码示例的详细信息。
- 了解如何使用 Azure AD B2C 在自己的 Web 应用中启用身份验证。