使用 Azure AD B2C 在示例 iOS Swift 应用中配置身份验证

重要

自 2025 年 5 月 1 日起,Azure AD B2C 将不再可供新客户购买。 在我们的常见问题解答中了解详细信息

本文使用示例 iOS Swift 应用程序来说明如何将 Azure Active Directory B2C (Azure AD B2C) 身份验证添加到移动应用。

概述

OpenID Connect (OIDC) 是在 OAuth 2.0 上构建的身份验证协议。 可以使用 OIDC 安全地将用户登录到应用程序。 此移动应用示例将 Microsoft身份验证库(MSAL) 与用于代码交换的 OIDC 授权代码证明密钥(PKCE)流配合使用。 MSAL 是一个Microsoft提供的库,可简化向移动应用添加身份验证和授权支持。

登录流涉及以下步骤:

  1. 用户打开应用并选择 登录
  2. 该应用将打开移动设备的系统浏览器,并启动对 Azure AD B2C 的身份验证请求。
  3. 用户 注册或登录重置密码或使用 社交帐户登录。
  4. 用户成功登录后,Azure AD B2C 会将授权代码返回到应用。
  5. 应用执行以下操作:
    1. 将此授权代码交换到 ID 令牌、访问令牌和刷新令牌。
    2. 它读取 ID 令牌声明。
    3. 它将令牌存储在内存中缓存中供以后使用。

应用注册概述

若要使应用能够使用 Azure AD B2C 登录并调用 Web API,请在 Azure AD B2C 目录中注册两个应用程序:

  • 通过移动应用程序注册,应用可以使用 Azure AD B2C 登录。 在应用注册期间,指定 重定向 URI。 重定向 URI 是用户在使用 Azure AD B2C 进行身份验证后重定向到的终结点。 应用注册过程生成 应用程序 ID,也称为 客户端 ID,用于唯一标识移动应用(例如 ,应用 ID:1)。

  • 注册 Web API 后,你的应用就能够调用受保护的 Web API。 注册将公开 Web API 权限(范围)。 应用注册过程生成一个 应用程序 ID,它唯一标识 Web API(例如 ,应用 ID:2)。 授予移动应用(应用 ID:1)对 Web API 范围(应用 ID:2)的权限。

下图演示了应用程序注册和体系结构:

包含 Web API 调用注册和令牌的移动应用示意图。

调用 Web API

身份验证完成后,用户将与应用交互,应用会调用受保护的 Web API。 Web API 使用持有者令牌身份验证。 持有者令牌是应用从 Azure AD B2C 获取的访问令牌。 应用在 HTTPS 请求的授权标头中传递令牌。

Authorization: Bearer <access token>

如果访问令牌范围与 Web API 范围不一致,身份验证库将获取具有正确范围的新访问令牌。

注销流程

注销流程涉及以下步骤:

  1. 用户从应用中注销。
  2. 应用清除其会话对象,并且身份验证库清除其令牌缓存。
  3. 应用将用户定向到 Azure AD B2C 注销终结点,以终止 Azure AD B2C 会话。
  4. 用户被重定向回应用。

先决条件

运行以下内容的计算机:

步骤 1:配置用户流

当用户尝试登录你的应用时,该应用会通过用户流向授权终结点发起身份验证请求。 用户流定义并控制用户体验。 用户完成用户流后,Azure AD B2C 会生成一个令牌,然后将用户重定向回应用程序。

创建用户流或自定义策略(如果你尚未这样做)。 重复这些步骤以按如下所述创建三个单独的用户流:

  • 组合的“登录和注册”用户流,例如 。 此用户流还支持“忘记密码”体验。
  • “个人资料编辑”用户流,例如
  • “密码重置”用户流,例如

Azure AD B2C 将在用户流名称前面追加 B2C_1_。 例如,susi 将变为 B2C_1_susi

步骤 2:注册移动应用程序

创建移动应用和 Web API 应用程序注册,并指定 Web API 的范围。

步骤 2.1:注册 Web API 应用

请按照以下步骤创建 Web API 应用注册(应用 ID: 2):

  1. 登录到 Azure 门户

  2. 确保正在使用的目录包含 Azure AD B2C 租户。 在门户工具栏中选择“目录 + 订阅”图标。

  3. 在“门户设置 | 目录+订阅”页上的“目录名称”列表中找到你的 Azure AD B2C 目录,然后选择“切换”。

  4. 在 Azure 门户中,搜索并选择 Azure AD B2C

  5. 选择“应用注册”,然后选择“新建注册”

  6. 对于名称,请输入应用程序的名称(例如 my-api1) 。 保留“重定向 URI”和“支持的帐户类型”的默认值。

  7. 选择“注册”。

  8. 完成应用注册后,选择“概述”。

  9. 记录“应用程序(客户端) ID”值,以便在稍后配置 Web 应用程序时使用。

    演示如何获取 Web API 应用程序 ID 的屏幕截图。

步骤 2.2:配置 Web API 应用范围

  1. 选择所创建的 my-api1 应用程序(应用 ID:2)以打开其“概述”页面 。

  2. 在“管理”下,选择“公开 API” 。

  3. 选择“应用程序 ID URI”旁边的“设置”链接。 将默认值 (GUID) 替换为一个唯一名称(例如“tasks-api”),然后选择“保存”。

    Web 应用在请求 Web API 的访问令牌时,应将此 URI 添加为你为 API 定义的每个范围的前缀。

  4. 在“此 API 定义的范围”下选择“添加范围”。

  5. 若要创建一个用于定义对 API 的读取访问权限的范围,请执行以下操作:

    1. 对于“范围名称”,输入“tasks.read” 。
    2. 对于“管理员同意显示名称”,输入“对任务 API 的读取访问权限” 。
    3. 对于“管理员同意说明”,输入“允许对任务 API 进行读取访问” 。
  6. 选择添加作用域

  7. 选择“添加范围”,然后添加一个用于定义对 API 的写入访问权限的范围:

    1. 对于“范围名称”,输入“tasks.write” 。
    2. 对于“管理员同意显示名称”,“对任务 API 的写入访问权限” 。
    3. 对于“管理员同意说明”,输入“允许对任务 API 进行写入访问” 。
  8. 选择添加作用域

步骤 2.3:注册移动应用

若要创建移动应用注册,请执行以下作:

  1. 登录到 Azure 门户
  2. 选择“应用注册”,然后选择“新建注册”
  3. “名称”下,输入应用程序的名称(例如 iOs-app1)。
  4. 在“支持的帐户类型”下,选择“任何标识提供者或组织目录中的帐户(用于通过用户流对用户进行身份验证)”
  5. “重定向 URI”下,选择 “公共客户端/本机”(移动和桌面), 然后在 URL 框中输入 msauth.com.microsoft.identitysample.MSALiOS://auth
  6. 选择“注册”。
  7. 完成应用注册后,选择“概述”。
  8. 配置移动应用程序时,请记录 应用程序(客户端)ID 供以后使用。 突出显示移动应用程序 ID 的屏幕截图。

步骤 2.4:授予 Web API 的移动应用权限

若要向应用(应用 ID:1)授予权限,请执行以下步骤:

  1. 选择“应用注册”,然后选择你所创建的应用(应用 ID:1) 。

  2. 在“ 管理”下,选择 API 权限

  3. 在“已配置权限”下,选择“添加权限”。

  4. 选择“我的 API”选项卡。

  5. 选择应授予 Web 应用程序访问权限的 API(应用 ID:2)。 例如,输入“my-api1”。

  6. 在“权限”下展开“任务”,然后选择之前定义的范围(例如,tasks.read 和 tasks.write )。

  7. 选择“添加权限”。

  8. 选择“向<租户名称授予管理员许可”。

  9. 选择 “是”

  10. 选择“刷新”,然后验证两个范围的“状态”下是否均显示“已授予...” 。

  11. 从“配置权限”列表中,选择范围,然后复制范围全名。

    已配置权限窗格的屏幕截图,其中显示授予了读取访问权限。

步骤 3:配置示例 Web API

此示例获取一个访问令牌,其中包含移动应用可用于 Web API 的相关范围。 若要从代码调用 Web API,请执行以下作:

  1. 使用现有的 Web API,或创建新的 Web API。 有关详细信息,请参阅 使用 Azure AD B2C 在自己的 Web API 中启用身份验证
  2. 更改示例代码以 调用 Web API
  3. 配置 Web API 后,复制 Web API 终结点的 URI。 在接下来的步骤中,你将使用网络 API 接口。

提示

如果没有 Web API,仍可以运行此示例。 在这种情况下,应用返回访问令牌,但无法调用 Web API。

步骤 4:获取 iOS 移动应用示例

  1. 下载 .zip 文件,或从 GitHub 存储库克隆示例 Web 应用。

    git clone https://github.com/Azure-Samples/active-directory-b2c-ios-swift-native-msal
    
  2. 使用 CocoaPods 安装 MSAL 库。 在终端窗口中,转到项目根文件夹。 此文件夹包含 podfile 文件。 运行下面的命令:

    pod install
    
  3. 使用 Xcode 打开MSALiOS.xcworkspace工作区。

步骤 5:配置示例移动应用

打开 ViewController.swift 文件。 类 ViewController 成员包含有关 Azure AD B2C 标识提供者的信息。 移动应用使用此信息与 Azure AD B2C 建立信任关系,让用户登录和注销,获取令牌并对其进行验证。

更新以下类成员:

密钥 价值
kTenantName Azure AD B2C 租户的完整租户名称(例如 contoso.partner.onmschina.cn)。
kAuthorityHostName Azure AD B2C 租户名称的第一部分(例如 contoso.b2clogin.cn)。
kClientID 步骤 2.3 中的移动应用程序 ID。
kRedirectUri 步骤 2.3 中的移动应用程序重定向 URI,即 msauth.com.microsoft.identitysample.MSALiOS://auth
注册或登录政策 步骤 1 中创建的注册或登录用户流或自定义策略。
kEditProfilePolicy 步骤 1 中创建的用户资料编辑流程或自定义策略。
kGraphURI (可选)在 步骤 3 (例如, https://contoso.chinacloudsites.cn/hello)中创建的 Web API 终结点。
kScopes 步骤 2.4 中创建的 Web API 范围。

步骤 6:运行和测试移动应用

  1. 使用 连接的 iOS 设备的模拟器生成并运行项目。

  2. 选择 “登录”,然后使用 Azure AD B2C 本地或社交帐户注册或登录。

    显示如何启动登录流程的屏幕截图。

  3. 身份验证成功后,将在导航栏中看到显示名称。

    突出显示 Azure AD B2C 访问令牌和用户 ID 的屏幕截图。

后续步骤

学习如何做到: