适用于: 员工租户
外部租户(了解详细信息)
本教程演示如何将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:6.+' //... }
在 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 支持以下日志级别:
- 错误
- 警告
- 信息
- 详细
有关 MSAL 日志记录的详细信息,请参阅 MSAL for Android 中的日志记录。
创建本机身份验证 MSAL SDK 实例
在 onCreate()
方法中,创建 MSAL 实例,以便应用可以通过本机身份验证对租户执行身份验证。 该方法返回名为 authClient
createNativeAuthPublicClientApplication()
的实例。 传递前面创建的 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"
}
}
- 使用
getCurrentAccount()
来检索缓存帐户,该操作会返回一个对象accountResult
。 - 如果在持久性中找到帐户,请使用
GetAccountResult.AccountFound
来显示已登录状态。 - 否则,使用
GetAccountResult.NoAccountFound
显示已注销状态。
确保包含 import 语句。 Android Studio 应该会自动为你添加 import 语句。