教程:准备 Android 移动应用来进行本机身份验证
本教程演示如何将 Microsoft 身份验证库 (MSAL) 本机身份验证 SDK 添加到 Android 移动应用。
本教程介绍如何执行下列操作:
- 添加 MSAL 依赖项。
- 创建配置文件。
- 创建 MSAL SDK 实例。
先决条件
- 请按照使用本机身份验证在示例 Android (Kotlin) 移动应用中登录用户中的说明操作并在外部租户中注册应用(如果尚未这样做)。 请确保完成以下步骤:
- 注册应用程序。
- 启用公共客户端和本机身份验证流程。
- 授予 API 权限。
- 创建用户流。
- 将应用与用户流关联。
- Android 项目。 如果没有 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.+' //... }
在 Android Studio 中,选择“文件”>“将项目与 Gradle 文件同步”。
创建配置文件
请通过 JSON 配置设置将所需的租户标识符(例如应用程序(客户端)ID)传递到 MSAL SDK。
请使用以下步骤创建配置文件:
在 Android Studio 的项目窗格中,导航到 app\src\main\res。
右键单击“res”,选择“新建”>“目录”。 输入
raw
作为新目录名称,然后选择“确定”。在 app\src\main\res\raw 中,创建一个名为
auth_config_native_auth.json
的新 JSON 文件。在
auth_config_native_auth.json
文件中,添加以下 MSAL 配置:{ "client_id": "Enter_the_Application_Id_Here", "authorities": [ { "type": "CIAM", "authority_url": "https://Enter_the_Tenant_Subdomain_Here.ciamlogin.com/Enter_the_Tenant_Subdomain_Here.onmicrosoft.com/" } ], "challenge_types": ["oob"], "logging": { "pii_enabled": false, "log_level": "INFO", "logcat_enabled": true } } //...
将以下占位符替换为从 Microsoft Entra 管理中心获取的租户值:
- 将
Enter_the_Application_Id_Here
占位符替换为之前注册的应用的应用程序(客户端)ID。 - 将
Enter_the_Tenant_Subdomain_Here
替换为目录(租户)子域。 例如,如果租户主域为contoso.onmicrosoft.com
,请使用contoso
。 如果没有租户名称,请了解如何读取租户详细信息。
质询类型是值列表,应用使用其来通知 Microsoft Entra 有关其支持的身份验证方法。
- 对于使用电子邮件一次性密码的注册和登录流,请使用
["oob"]
。 - 对于使用电子邮件和密码的注册和登录流,请使用
["oob","password"]
。 - 对于自助式密码重置 (SSPR),请使用
["oob"]
。
详细了解质询类型。
- 将
可选:日志记录配置
通过创建日志记录回调在创建应用时启用日志记录,使 SDK 可以输出日志。
import com.microsoft.identity.client.Logger
fun initialize(context: Context) {
Logger.getInstance().setExternalLogger { tag, logLevel, message, containsPII ->
Logs.append("$tag $logLevel $message")
}
}
若要配置记录器,需要在配置文件 auth_config_native_auth.json
中添加一个节:
//...
{
"logging": {
"pii_enabled": false,
"log_level": "INFO",
"logcat_enabled": true
}
}
//...
- logcat_enabled:启用库的日志记录功能。
- pii_enabled:指定是要记录包含个人数据还是组织数据的消息。 设置为 false 时,日志将不包含个人数据。 设置为 true, 时,日志可能包含个人数据。
- log_level:用于确定要启用哪种级别的日志记录。 Android 支持以下日志级别:
- ERROR
- 警告
- INFO
- 详细
有关 MSAL 日志记录的详细信息,请参阅 MSAL for Android 中的日志记录。
创建本机身份验证 MSAL SDK 实例
在 onCreate()
方法中创建 MSAL 实例,以便应用可以通过本机身份验证向你的租户执行身份验证。 createNativeAuthPublicClientApplication()
方法返回一个名为 authClient
的实例。 将之前创建的 JSON 配置文件作为参数传递。
//...
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
this,
R.raw.auth_config_native_auth
)
//...
你的代码应类似于以下代码片段:
class MainActivity : AppCompatActivity() {
private lateinit var authClient: INativeAuthPublicClientApplication
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
authClient = PublicClientApplication.createNativeAuthPublicClientApplication(
this,
R.raw.auth_config_native_auth
)
getAccountState()
}
private fun getAccountState() {
CoroutineScope(Dispatchers.Main).launch {
val accountResult = authClient.getCurrentAccount()
when (accountResult) {
is GetAccountResult.AccountFound -> {
displaySignedInState(accountResult.resultValue)
}
is GetAccountResult.NoAccountFound -> {
displaySignedOutState()
}
}
}
}
private fun displaySignedInState(accountResult: AccountState) {
val accountName = accountResult.getAccount().username
val textView: TextView = findViewById(R.id.accountText)
textView.text = "Cached account found: $accountName"
}
private fun displaySignedOutState() {
val textView: TextView = findViewById(R.id.accountText)
textView.text = "No cached account found"
}
}
- 使用会返回对象
accountResult
的getCurrentAccount()
来检索缓存的帐户。 - 如果发现帐户处于持久化状态,请使用
GetAccountResult.AccountFound
显示已登录状态。 - 否则,请使用
GetAccountResult.NoAccountFound
显示已退出登录状态。
确保包含 import 语句。 Android Studio 应该会自动为你包含 import 语句。