在示例 iOS (Swift) 应用中登录用户并调用受保护的 Web API

本指南演示如何配置示例 iOS 移动应用程序以登录用户,以及如何调用受保护的 ASP.NET Core Web API。

本文将执行以下任务:

  • 在 Microsoft Entra 管理中心注册应用程序。
  • 添加平台重定向 URL。
  • 启用公共客户端流。
  • 更新 iOS 配置代码示例文件,以使用自己的 Microsoft Entra 外部 ID 获取客户租户详细信息。
  • 运行和测试示例 iOS 移动应用程序。

先决条件

  • Xcode.

  • 外部租户。 如果还没有,请注册免费试用版

  • 公开至少一个范围(委托权限)和一个应用角色(应用程序权限)(例如 ToDoList.Read)的 API 注册。 按照在示例 iOS 移动应用中调用 API 的说明,获取受保护的正常运行的 ASP.NET Core Web API。 请确保完成以下步骤:

    • 注册 Web API 应用程序。
    • 配置 API 范围。
    • 配置应用角色。
    • 配置可选声明。
    • 克隆或下载示例 Web API。
    • 配置并运行示例 Web API。

注册应用程序

若要使应用程序能够让用户通过 Microsoft Entra 登录,必须让 Microsoft Entra 外部 ID 能够感知你创建的应用程序。 应用注册会在应用与 Microsoft Entra 之间建立信任关系。 注册应用程序时,外部 ID 会生成一个称为“应用程序(客户端)ID”的唯一标识符,该值用于在创建身份验证请求时标识应用。

以下步骤演示如何在 Microsoft Entra 管理中心注册应用:

  1. 至少以应用程序开发人员的身份登录到 Microsoft Entra 管理中心

  2. 如果你有权访问多个租户,请使用顶部菜单中的“设置”图标 ,通过“目录 + 订阅”菜单切换到你的外部租户

  3. 浏览到“标识”>“应用程序”>“应用注册”。

  4. 选择“+ 新建注册”。

  5. 在显示的“注册应用程序”页中;

    1. 输入一个向应用用户显示的、有意义的应用程序名称,例如 ciam-client-app
    2. 在“支持的帐户类型”下,选择“仅此组织目录中的帐户” 。
  6. 选择“注册”。

  7. 成功注册后,会显示应用程序的“概述”窗格。 记录要在应用程序源代码中使用的应用程序(客户端)ID

添加平台重定向 URL

若要为应用注册指定应用类型,请执行以下步骤:

  1. 在“管理”下,选择“身份验证”。
  2. 在“平台配置”页上,选择“添加平台”,然后选择“iOS / macOS”选项。
  3. 输入项目的捆绑 ID。 如果下载了示例代码,则该值为 com.microsoft.identitysample.ciam.MSALiOS
  4. 选择“配置”并保存在“iOS / macOS 配置”窗格中出现的“MSAL 配置”,以便稍后配置应用时输入该内容。
  5. 选择“完成” 。

启用公共客户端流

若要将应用标识为公共客户端,请执行以下步骤:

  1. 在“管理”下,选择“身份验证”。

  2. 在“高级设置”下,对于“允许公共客户端流”,选择“是”。

  3. 选择“保存”以保存更改。

  1. 从“应用注册”页中,选择创建的应用程序(例如 ciam-client-app)以打开其“概述”页。

  2. 在“管理”下选择“API 权限” 。 在“已配置的权限”列表中,应用程序已被分配 User.Read 权限。 但是,由于该租户是外部租户,因此使用者用户本身不能同意此权限。 作为管理员,你必须代表租户中的所有用户同意此权限:

    1. 选择“为 <租户名称> 授予管理员同意”,然后选择“是”。
    2. 选择“刷新”,然后验证两个范围的“状态”下是否均显示“已为 <租户名称> 授予”。

向 iOS 示例应用授予 Web API 权限

注册好客户端应用和 Web API 并通过创建范围公开 API 后,可按照以下步骤来配置客户端对 API 的权限:

  1. 从“应用注册”页中,选择创建的应用程序(例如 ciam-client-app)以打开其“概述”页。

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

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

  4. 选择“我的组织使用的 API”选项卡。

  5. 在 API 列表中,选择 API(例如 ciam-ToDoList-api)。

  6. 选择“委托的权限”选项。

  7. 从权限列表中,选择“ToDoList.Read”、“ToDoList.ReadWrite”(必要时使用搜索框)。

  8. 选择“添加权限”按钮。

  9. 此时,你已正确分配了权限。 但是,由于租户是客户的租户,因此使用者用户本身不能同意这些权限。 要解决此问题,作为管理员的你必须代表租户中的所有用户同意这些权限:

    1. 选择“为 <租户名称> 授予管理员同意”,然后选择“是”。

    2. 选择“刷新”,然后验证两个权限的“状态”下是否均显示“已为 <租户名称> 授予”。

  10. 从“配置的权限”列表中,选择“ToDoList.Read”和“ToDoList.ReadWrite”权限(一次选择一个),然后复制权限的完整 URI 供以后使用。 完整权限 URI 看起来类似于 api://{clientId}/{ToDoList.Read}api://{clientId}/{ToDoList.ReadWrite}

克隆示例 iOS 移动应用程序

若要获取示例应用程序,可以从 GitHub 克隆它或将其下载为 .zip 文件。

  • 若要克隆示例,请打开命令提示符并导航到要创建项目的位置,然后输入以下命令:

    git clone https://github.com/Azure-Samples/ms-identity-ciam-browser-delegated-ios-sample.git
    

配置示例 iOS 移动应用程序

若要启用对 Web API 资源的身份验证和访问,请执行以下步骤,配置该示例:

  1. 在 Xcode 中,打开克隆的项目。

  2. 打开 /MSALiOS/Configuration.swift 文件。

  3. 查找占位符:

    • 查找 Enter_the_Application_Id_Here 并将其替换为之前注册的应用的应用程序(客户端)ID。
    • Enter_the_Redirect_URI_Here 并将其替换为之前在添加平台重定向 URL 时下载的 Microsoft 身份验证库 (MSAL) 配置文件中 kRedirectUri 的值。
    • Enter_the_Protected_API_Full_URL_Here 并将其替换为 Web API 的 URL。 Enter_the_Protected_API_Full_URL_Here 应包括 ASP.NET Web API 的基 URL(部署的 Web API URL)和终结点 (/api/todolist)。
    • Enter_the_Protected_API_Scopes_Here 并将其替换为向 iOS 示例应用授予 Web API 权限中记录的范围。
    • Enter_the_Tenant_Subdomain_Here 并将其替换为目录(租户)子域。 例如,如果租户主域为 contoso.onmicrosoft.com,请使用 contoso。 如果不知道租户子域,请了解如何读取租户详细信息

应用已配置好,现已可运行。

运行 iOS 示例应用并调用 Web API

若要构建并运行应用,请执行以下步骤:

  1. 若要生成和运行代码,请从 Xcode 的“产品”菜单中选择“运行”。 成功生成后,Xcode 将在模拟器中启动示例应用。
  2. 选择“以交互方式获取令牌”以请求访问令牌。
  3. 选择 API - 执行 GET 以调用以前设置的 ASP.NET Core Web API。 成功调用 Web API 将返回 HTTP 200,而 HTTP 403 表示未经授权的访问。