本教程介绍如何将适用于 Android 的Microsoft身份验证库(MSAL)添加到 Android 应用。 MSAL 使 Android 应用程序能够使用 Microsoft Entra 对用户进行身份验证。
在本教程中,你将;
- 添加 MSAL 依赖项
- 添加配置
- 创建 MSAL SDK 实例
先决条件
- 工作人员租户。 可以使用 默认目录 或设置新租户。
- 在 Microsoft Entra 管理中心注册一个新应用,并配置为仅适用于此组织目录中的帐户。 有关更多详细信息 ,请参阅注册应用程序 。 在应用程序 概述 页中记录以下值供以后使用:
- 应用程序(客户端)ID
- 目录(租户)ID
- Android 项目。 如果没有 Android 项目,请创建它。
添加重定向 URI
必须在应用注册中配置特定的重定向 URI,以确保与下载的代码示例兼容。 这些 URI 对于在用户成功登录后将用户重定向回应用至关重要。
在“管理”下,选择“身份验证”“添加平台”“Android” 。
根据你在上面下载的示例类型输入项目的包名称。
- Java 示例 -
com.azuresamples.msalandroidapp
- Kotlin 示例 -
com.azuresamples.msalandroidkotlinapp
- Java 示例 -
在“配置 Android 应用”窗格的“签名哈希”部分,点击“生成开发签名哈希”,并将 KeyTool 命令复制到命令行。
- 安装 KeyTool.exe,使其作为 Java 开发工具包 (JDK) 的一部分。 还必须安装 OpenSSL 工具才能执行 KeyTool 命令。 有关详细信息,请参阅 有关生成密钥的 Android 文档。
输入由 KeyTool 生成的签名哈希。
选择“配置”并保存在“Android 配置”窗格中出现的“MSAL 配置”,以便稍后配置应用时输入该内容。
选择“完成”。
将 MSAL 依赖项和相关库添加到项目
若要在 Android 项目中添加 MSAL 依赖项,请执行以下步骤:
在 Android Studio 中打开项目或创建新项目。
打开应用程序的
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 版的实现以及其他潜在依赖项。在 Android Studio 中,选择“ 文件>同步项目与 Gradle 文件”。
添加配置
通过 JSON 配置设置将所需的租户标识符(例如应用程序(客户端)ID 传递到 MSAL SDK。
使用以下步骤创建配置文件:
在 Android Studio 的项目窗格中,导航到 app\src\main\res。
右键单击“res”,选择“新建”>“目录”。 输入
raw
作为新目录名称,然后选择“确定”。在 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" } } ] }
建议使用“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) 方法来处理错误。