根据https://docs.microsoft.com/en-us/azure/active-directory/develop/tutorial-v2-android上的说明,我使用 KeyTool 生成了开发签名哈希并在 Azure 门户中注册了我的应用程序。
门户生成 MSAL 配置,然后我将其粘贴到项目中的 res.raw.auth_config.json 中(my-app-client-id 和 my-app 的包名称只是下面示例中的占位符;实际值由自动生成天蓝色):
{
"client_id" : "<my-app-client-id>",
"authorization_user_agent" : "DEFAULT",
"redirect_uri" : "msauth://<my-app's package name>/npYKnQBHywGAasZflTy2xmdpEiU%3D",
"authorities" : [
{
"type": "AAD",
"audience": {
"type": "AzureADMultipleOrgs",
"tenant_id": "organizations"
}
}
]
}
然后我将以下内容添加到 AndroidManifest.xml:
<application>
[..]
<!--Intent filter to catch Microsoft's callback after Sign In-->
<activity
android:name="com.microsoft.identity.client.BrowserTabActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE"/>
<!--
Add in your scheme/host from registered redirect URI
note that the leading "/" is required for android:path
-->
<data
android:scheme="msauth"
android:host=""
android:path="/<signature-generated-by-keytool>" />
</intent-filter>
</activity>
[...]
</application>
在我的活动的 onCreate() 中,我尝试创建一个单一帐户客户端应用程序,如下所示:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_single_account_model);
initializeUI();
PublicClientApplication.createSingleAccountPublicClientApplication(this,
R.raw.auth_config,
new IPublicClientApplication.ISingleAccountApplicationCreatedListener() {
@Override
public void onCreated(ISingleAccountPublicClientApplication application) {
mSingleAccountApp = application;
loadAccount();
}
@Override
public void onError(MsalException exception) {
displayError(exception);
}
});
}
不幸的是, PublicClientApplication.createSingleAccountPublicClientApplication()调用使应用程序崩溃,并出现以下错误:
java.lang.IllegalStateException:配置文件中的重定向 URI 与使用包名和签名哈希生成的不匹配。请验证配置文件中的 uri 和 Azure 门户中的应用注册。
我无法弄清楚为什么会发生这种情况,因为配置文件的内容是由 Azure 门户生成的,并且包名称、签名哈希和重定向 URI 与门户中显示的内容相匹配。
我会很感激任何建议。