教程:使用 Microsoft 标识平台设置 Android 应用以登录用户

本教程介绍如何将适用于 Android 的Microsoft身份验证库(MSAL)添加到 Android 应用。 MSAL 使 Android 应用程序能够使用 Microsoft Entra 对用户进行身份验证。

在本教程中,你将;

  • 添加 MSAL 依赖项
  • 添加配置
  • 创建 MSAL SDK 实例

先决条件

  • 工作人员租户。 可以使用 默认目录 或设置新租户。
  • Microsoft Entra 管理中心注册一个新应用,并配置为仅适用于此组织目录中的帐户。 有关更多详细信息 ,请参阅注册应用程序 。 在应用程序 概述 页中记录以下值供以后使用:
    • 应用程序(客户端)ID
    • 目录(租户)ID
  • Android 项目。 如果没有 Android 项目,请创建它。

添加重定向 URI

必须在应用注册中配置特定的重定向 URI,以确保与下载的代码示例兼容。 这些 URI 对于在用户成功登录后将用户重定向回应用至关重要。

  1. 在“管理”下,选择“身份验证”“添加平台”“Android” 。

  2. 根据你在上面下载的示例类型输入项目的包名称。

    • Java 示例 - com.azuresamples.msalandroidapp
    • Kotlin 示例 - com.azuresamples.msalandroidkotlinapp
  3. 在“配置 Android 应用”窗格的“签名哈希”部分,点击“生成开发签名哈希”,并将 KeyTool 命令复制到命令行。

    • 安装 KeyTool.exe,使其作为 Java 开发工具包 (JDK) 的一部分。 还必须安装 OpenSSL 工具才能执行 KeyTool 命令。 有关详细信息,请参阅 有关生成密钥的 Android 文档
  4. 输入由 KeyTool 生成的签名哈希

  5. 选择“配置”并保存在“Android 配置”窗格中出现的“MSAL 配置”,以便稍后配置应用时输入该内容。

  6. 选择“完成”。

将 MSAL 依赖项和相关库添加到项目

若要在 Android 项目中添加 MSAL 依赖项,请执行以下步骤:

  1. 在 Android Studio 中打开项目或创建新项目。

  2. 打开应用程序的 build.gradle 文件,然后添加以下依赖项:

    allprojects {
    repositories {
        //Needed for com.microsoft.device.display:display-mask library
        maven {
            url 'https://pkgs.dev.azure.com/MicrosoftDeviceSDK/DuoSDK-Public/_packaging/Duo-SDK-Feed/maven/v1'
            name 'Duo-SDK-Feed'
        }
        mavenCentral()
        google()
        }
    }
    //...
    
    dependencies { 
        implementation 'com.microsoft.identity.client:msal:5.+'
        //...
    }
    

    在配置中 build.gradle ,为项目依赖项定义存储库。 它包含了来自 Azure DevOps 的 com.microsoft.device.display:display-mask 库的 Maven 存储库 URL。 此外,它还利用 Maven Central 和 Google 存储库。 依赖项章节中指定了 MSAL 第 5 版的实现以及其他潜在依赖项。

  3. 在 Android Studio 中,选择“ 文件>同步项目与 Gradle 文件”。

添加配置

通过 JSON 配置设置将所需的租户标识符(例如应用程序(客户端)ID 传递到 MSAL SDK。

使用以下步骤创建配置文件:

  1. 在 Android Studio 的项目窗格中,导航到 app\src\main\res

  2. 右键单击“res”,选择“新建”>“目录”。 输入 raw 作为新目录名称,然后选择“确定”。

  3. app>src>main>res>raw 中,新建名为 auth_config_single_account.json 的 JSON 文件,然后粘贴以前保存的 MSAL 配置。

    在“重定向 URI”下方,粘贴:

      "account_mode" : "SINGLE",
    

    配置文件应与如下示例类似:

    {
      "client_id": "00001111-aaaa-bbbb-3333-cccc4444",
      "authorization_user_agent": "WEBVIEW",
      "redirect_uri": "msauth://com.azuresamples.msalandroidapp/00001111%cccc4444%3D",
      "broker_redirect_uri_registered": true,
      "account_mode": "SINGLE",
      "authorities": [
        {
          "type": "AAD",
          "audience": {
            "type": "AzureADandPersonalMicrosoftAccount",
            "tenant_id": "common"
          }
        }
      ]
    }
    

    由于本教程仅演示如何在单帐户模式下配置应用,请参阅 单帐户与多帐户模式配置应用 以获取详细信息

  4. 建议使用“WEBVIEW”。 如果要在应用中将“authorization_user_agent”配置为“BROWSER”,则需要进行以下更新。 a) 在 auth_config_single_account.json 中更新“authorization_user_agent”为“Browser”。 b) 更新 AndroidManifest.xml。 在应用中,转到“应用”>“src”>“主”>“AndroidManifest.xml”,将 BrowserTabActivity 活动添加为 <application> 元素的子元素。 此设置允许 Microsoft Entra ID 在完成身份验证后回调到您的应用程序。

    <!--Intent filter to capture System Browser or Authenticator calling back to our app after sign-in-->
    <activity
        android:name="com.microsoft.identity.client.BrowserTabActivity"
        android:exported="true">
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="msauth"
                android:host="Enter_the_Package_Name"
                android:path="/Enter_the_Signature_Hash" />
        </intent-filter>
    </activity>
    
    • 使用包名称替换android:host=.值。 它看起来应该类似于:com.azuresamples.msalandroidapp
    • 使用“签名哈希”替换 android:path=。 确保签名哈希的开头有前导 /。 它看起来应该类似于:/aB1cD2eF3gH4+iJ5kL6-mN7oP8q=

    还可以在应用注册的“身份验证”边栏选项卡中找到这些值。

创建 MSAL SDK 实例

若要初始化 MSAL SDK 实例,请使用以下代码:

PublicClientApplication.createSingleAccountPublicClientApplication(
    getContext(),
    R.raw.auth_config_single_account,
    new IPublicClientApplication.ISingleAccountApplicationCreatedListener() {
        @Override
        public void onCreated(ISingleAccountPublicClientApplication application) {
            // Initialize the single account application instance
            mSingleAccountApp = application;
            loadAccount();
        }

        @Override
        public void onError(MsalException exception) {
            // Handle any errors that occur during initialization
            displayError(exception);
        }
    }
);

此代码使用配置文件 auth_config_single_account.json创建单个帐户公共客户端应用程序。 成功创建应用程序时,它将向实例 mSingleAccountApp 分配并调用 loadAccount() 该方法。 如果在创建过程中发生错误,它将通过调用 displayError(exception) 方法来处理错误。

后续步骤