在示例 iOS (Swift) 应用中登录用户并调用受保护的 Web API
本指南演示如何配置示例 iOS 移动应用程序以登录用户,以及如何调用受保护的 ASP.NET Core Web API。
本文将执行以下任务:
- 在 Microsoft Entra 管理中心注册应用程序。
- 添加平台重定向 URL。
- 启用公共客户端流。
- 更新 iOS 配置代码示例文件,以使用自己的 Microsoft Entra 外部 ID 获取客户租户详细信息。
- 运行和测试示例 iOS 移动应用程序。
先决条件
外部租户。 如果还没有,请注册免费试用版。
公开至少一个范围(委托权限)和一个应用角色(应用程序权限)(例如 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 管理中心注册应用:
至少以应用程序开发人员的身份登录到 Microsoft Entra 管理中心。
如果你有权访问多个租户,请使用顶部菜单中的“设置”图标 ,通过“目录 + 订阅”菜单切换到你的外部租户。
浏览到“标识”>“应用程序”>“应用注册”。
选择“+ 新建注册”。
在显示的“注册应用程序”页中;
- 输入一个向应用用户显示的、有意义的应用程序名称,例如 ciam-client-app。
- 在“支持的帐户类型”下,选择“仅此组织目录中的帐户” 。
选择“注册”。
成功注册后,会显示应用程序的“概述”窗格。 记录要在应用程序源代码中使用的应用程序(客户端)ID。
添加平台重定向 URL
若要为应用注册指定应用类型,请执行以下步骤:
- 在“管理”下,选择“身份验证”。
- 在“平台配置”页上,选择“添加平台”,然后选择“iOS / macOS”选项。
- 输入项目的捆绑 ID。 如果下载了示例代码,则该值为
com.microsoft.identitysample.ciam.MSALiOS
。 - 选择“配置”并保存在“iOS / macOS 配置”窗格中出现的“MSAL 配置”,以便稍后配置应用时输入该内容。
- 选择“完成” 。
启用公共客户端流
若要将应用标识为公共客户端,请执行以下步骤:
在“管理”下,选择“身份验证”。
在“高级设置”下,对于“允许公共客户端流”,选择“是”。
选择“保存”以保存更改。
授权管理员同意
从“应用注册”页中,选择创建的应用程序(例如 ciam-client-app)以打开其“概述”页。
在“管理”下选择“API 权限” 。 在“已配置的权限”列表中,应用程序已被分配 User.Read 权限。 但是,由于该租户是外部租户,因此使用者用户本身不能同意此权限。 作为管理员,你必须代表租户中的所有用户同意此权限:
- 选择“为 <租户名称> 授予管理员同意”,然后选择“是”。
- 选择“刷新”,然后验证两个范围的“状态”下是否均显示“已为 <租户名称> 授予”。
向 iOS 示例应用授予 Web API 权限
注册好客户端应用和 Web API 并通过创建范围公开 API 后,可按照以下步骤来配置客户端对 API 的权限:
从“应用注册”页中,选择创建的应用程序(例如 ciam-client-app)以打开其“概述”页。
在“管理”下选择“API 权限” 。
在“已配置权限”下,选择“添加权限”。
选择“我的组织使用的 API”选项卡。
在 API 列表中,选择 API(例如 ciam-ToDoList-api)。
选择“委托的权限”选项。
从权限列表中,选择“ToDoList.Read”、“ToDoList.ReadWrite”(必要时使用搜索框)。
选择“添加权限”按钮。
此时,你已正确分配了权限。 但是,由于租户是客户的租户,因此使用者用户本身不能同意这些权限。 要解决此问题,作为管理员的你必须代表租户中的所有用户同意这些权限:
选择“为 <租户名称> 授予管理员同意”,然后选择“是”。
选择“刷新”,然后验证两个权限的“状态”下是否均显示“已为 <租户名称> 授予”。
从“配置的权限”列表中,选择“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 资源的身份验证和访问,请执行以下步骤,配置该示例:
在 Xcode 中,打开克隆的项目。
打开 /MSALiOS/Configuration.swift 文件。
查找占位符:
- 查找
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
若要构建并运行应用,请执行以下步骤:
- 若要生成和运行代码,请从 Xcode 的“产品”菜单中选择“运行”。 成功生成后,Xcode 将在模拟器中启动示例应用。
- 选择“以交互方式获取令牌”以请求访问令牌。
- 选择 API - 执行 GET 以调用以前设置的 ASP.NET Core Web API。 成功调用 Web API 将返回 HTTP
200
,而 HTTP403
表示未经授权的访问。