使用本机身份验证在示例 Android (Kotlin) 移动应用中登录用户

本指南演示如何运行 Android 示例应用程序,示范了使用 Microsoft Entra 的本机身份验证进行注册、登录、退出登录和密码重置的各种场景。

在本文中,学习如何:

  • 在外部租户中注册应用程序。
  • 启用公共客户端和本机身份验证流程。
  • 在外部租户中创建用户流。
  • 将应用程序与用户流相关联。
  • 更新 Android 配置代码示例文件,以使用自己的 Microsoft Entra 外部 ID 获取外部租户详细信息。
  • 运行并测试示例本机 Android 移动应用程序。

先决条件

注册应用程序

若要使应用程序能够让用户通过 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

启用公共客户端和本机身份验证流程

若要指定此应用为公共客户端,并且可以使用本机身份验证,请启用公共客户端和本机身份验证流程:

  1. 在“应用注册”页中,选择要为其启用公共客户端和本机身份验证流程的应用注册。
  2. 在“管理”下,选择“身份验证”。
  3. 在“高级设置”下,允许公共客户端流程
    1. 对于“启用以下移动和桌面流程”,请选择“是”。
    2. 对于“启用本机身份验证”,请选择“是”。
  4. 选择“保存”按钮。
  1. 从“应用注册”页中,选择创建的应用程序(例如 ciam-client-app)以打开其“概述”页。

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

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

创建用户流

按照以下步骤创建用户流。

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

  2. 如果你有权访问多个租户,请确保使用包含外部租户的目录:

    1. 在工具栏中选择“目录 + 订阅”图标。
    2. 在“门户设置 | 目录 + 订阅”页面上,在“目录名称”列表中找到外部租户目录,然后选择“切换”
  3. 在边栏菜单中选择“标识”。

  4. 选择“外部标识”>“用户流”。

  5. 选择“+ 新建用户流”。

  6. 在“创建”页上执行以下操作:

    1. 为用户流输入名称,例如 SignInSignUpSample。

    2. 在“标识提供者”列表中,选择“电子邮件帐户”。 此标识提供者使用户能够使用其电子邮件地址登录或注册。

    3. 在“电子邮件帐户”下,可以选择两个选项之一。 对于本教程,请选择“电子邮件一次性密码”

      • 电子邮件和密码:使新用户能够使用电子邮件地址作为登录名称并使用密码作为其第一重身份验证凭据进行注册和登录。
      • 电子邮件一次性密码:使新用户能够使用电子邮件地址作为登录名称,并使用电子邮件一次性密码作为其第一重身份验证凭据进行注册和登录。 要使此选项在用户流级别可用,请确保在租户级别启用电子邮件一次性密码 (OTP)(选择“所有标识提供者”,然后为“电子邮件一次性密码”选择“已配置”,选择“是”选项,然后选择“保存”)。
    4. 在“用户属性”下,可选择要在用户注册时收集的用户属性。 对于本指南,请选择“国家/地区”和“城市”

  7. 选择创建。 此时,新的用户流将显示在“用户流”列表中。 如果需要,请刷新页面。

将应用与用户流关联

尽管许多应用程序可与用户流相关联,但单个应用程序只能与一个用户流相关联。 用户流允许为特定应用程序配置用户体验。 例如,可以配置一个要求用户使用电子邮件地址登录或注册的用户流。

  1. 在边栏菜单中选择“标识”。

  2. 依次选择“外部标识”和“用户流”。

  3. 在“用户流”页中,选择之前创建的用户流名称,例如 SignInSignUpSample。

  4. 在“使用”下,选择“应用程序”。

  5. 选择“添加应用程序”。

  6. 从列表中选择应用程序(如 ciam-client-app),或使用搜索框查找应用程序,然后将其选中。

  7. 选择“选择”。

克隆示例 Android 移动应用程序

  1. 打开终端,并导航到要保留代码的目录。

  2. 通过运行以下命令,从 GitHub 克隆应用程序:

    git clone https://github.com/Azure-Samples/ms-identity-ciam-native-auth-android-sample 
    

配置示例 Android 移动应用程序

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

  2. 打开 app/src/main/res/raw/native_auth_sample_app_config.json 文件

  3. 查找占位符:

    • 查找 Enter_the_Application_Id_Here 并将其替换为之前注册的应用的应用程序(客户端)ID。
    • Enter_the_Tenant_Subdomain_Here 并将其替换为目录(租户)子域。 例如,如果租户主域为 contoso.onmicrosoft.com,请使用 contoso。 如果不知道租户子域,请了解如何读取租户详细信息

现已配置应用,并且已准备好运行。

运行并测试示例 Android 移动应用程序

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

  1. 在工具栏中,从“运行配置”菜单中选择你的应用。

  2. 在目标设备菜单中,选择要在其中运行应用的设备。

    如果没有配置任何设备,则需要创建 Android 虚拟设备以使用 Android Emulator 或连接物理 Android 设备。

  3. 选择“运行”按钮。 应用将打开“电子邮件和 OTP”屏幕

    Android 应用程序中提示输入电子邮件的用户提示屏幕截图。

  4. 输入有效的电子邮件地址,然后选择“注册”按钮。 应用将打开提交代码屏幕,并在电子邮件地址中收到 OTP 代码。

    Android 应用程序中提示输入一次性密码的用户提示屏幕截图。

  5. 在电子邮件收件箱中输入收到的 OTP 代码,然后选择“下一步”。 如果注册成功,应用会自动登录。 如果未在电子邮件收件箱中收到 OTP 代码,可以选择“重新发送密码”,以在一段时间后重新发送

    显示在 Android 应用程序中成功完成登录的屏幕截图。

  6. 若要注销,请选择“注销”按钮。

此示例支持的其他情况

此示例应用还支持以下身份验证流:

  • 电子邮件 + 密码涵盖使用电子邮件及密码登录或注册流。
  • 使用用户属性进行电子邮件 + 密码注册涵盖用电子邮件和密码注册,以及提交用户属性。
  • 密码重置涵盖自助式密码重置 (SSPR)。
  • 访问受保护的 API 涵盖在用户成功注册或登录并获取访问令牌后调用受保护的 API。
  • 回退到 Web 浏览器涵盖在用户出于任何原因无法通过本机完成身份验证时,使用基于浏览器的身份验证作为回退机制。

测试使用电子邮件及密码的流

在本部分中,你将测试使用电子邮件及密码的流,包括其变体,例如使用用户属性进行电子邮件 + 密码注册、自助式密码重置等:

  1. 使用创建用户流中的步骤创建新的用户流,但这次选择“使用电子邮件及密码”作为身份验证方法。 需要将“国家/地区”和“城市”配置为用户属性。 或者,可以修改现有用户流以应用“使用电子邮件及密码”(选择“外部标识”>“用户流”>“SignInSignUpSample”>“标识提供者”>“使用电子邮件及密码”>“保存”)

  2. 使用将应用程序与新用户流关联的步骤,将应用添加到新用户流。

  3. 运行示例应用,然后选择省略菜单(…)以打开更多选项

  4. 选择要测试的方案,例如“电子邮件 + 密码”或“使用用户属性进行电子邮件 + 密码注册”或“密码重置”,然后按照提示进行操作。 若要测试“密码重置”,需要首先注册用户,并为租户中的所有用户启用电子邮件一次性密码

测试调用受保护的 API 流

从示例 Android 移动应用调用受保护的 Web API。步骤参阅使用本机身份验证从示例 Android 移动应用中调用受保护 Web API 的说明。

后续步骤