MSAL 在调用 MultipleAccountPublicClientApplication() 时抛出 MsalClientException

MSAL throws MsalClientException when calling MultipleAccountPublicClientApplication()

PublicClientApplication.createMultipleAccountPublicClientApplication() 在某些 Android 设备上抛出 MsalClientException。在某些设备上一切正常。

Intune 公司门户应用安装在所有设备中并充当代理应用。代理应用程序视图未显示在受此问题影响的设备中。

尽管所有设备都使用相同的代码库并安装了相同的代理应用程序,但它在某些设备上运行而在其他设备上运行不正常的原因可能是什么?

堆栈跟踪:

com.microsoft.identity.client.exception.MsalClientException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
at com.microsoft.identity.client.internal.controllers.MsalExceptionAdapter.msalExceptionFromBaseException(MsalExceptionAdapter.java:51)
at com.microsoft.identity.client.PublicClientApplication.onError(PublicClientApplication.java:873)
at com.microsoft.identity.client.PublicClientApplication.onError(PublicClientApplication.java:870)
at com.microsoft.identity.common.internal.controllers.CommandDispatcher.run(CommandDispatcher.java:176)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:237)
at android.app.ActivityThread.main(ActivityThread.java:7860)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1075)
Caused by: com.microsoft.identity.common.exception.ClientException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
at com.microsoft.identity.common.internal.controllers.ExceptionAdapter.baseExceptionFromException(ExceptionAdapter.java:252)
at com.microsoft.identity.common.internal.controllers.CommandDispatcher.executeCommand(CommandDispatcher.java:142)
at com.microsoft.identity.common.internal.controllers.CommandDispatcher.access0(CommandDispatcher.java:52)
at com.microsoft.identity.common.internal.controllers.CommandDispatcher.run(CommandDispatcher.java:94)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
at com.microsoft.identity.client.internal.controllers.BrokerMsalController.putValueInSuccessEvent(BrokerMsalController.java:412)
at com.microsoft.identity.client.internal.controllers.BrokerMsalController.putValueInSuccessEvent(BrokerMsalController.java:392)
at com.microsoft.identity.client.internal.controllers.BrokerMsalController.invokeBrokerOperation(BrokerMsalController.java:221)
at com.microsoft.identity.client.internal.controllers.BrokerMsalController.getDeviceMode(BrokerMsalController.java:391)
at com.microsoft.identity.common.internal.controllers.GetDeviceModeCommand.execute(GetDeviceModeCommand.java:44)
at com.microsoft.identity.common.internal.controllers.GetDeviceModeCommand.execute(GetDeviceModeCommand.java:33)
at com.microsoft.identity.common.internal.controllers.CommandDispatcher.executeCommand(CommandDispatcher.java:137)
… 5 more

我不确定这是否是您的问题,但有一个可能的原因: 根据文档,它指出: 如果无法 return IMultipleAccountPublicClientApplication,此函数将传回 MsalClientException 对象。例如,当设备标记为 'shared'(PublicClientApplication#isSharedDevice() 设置为 true)

意味着如果设备是共享设备模式设备,那么调用 createmultiple... 将失败并出现 msal 异常。 要检查它是否是共享设备,根据此处 https://docs.microsoft.com/en-ca/azure/active-directory/develop/tutorial-v2-shared-device-mode#set-up-an-android-device-in-shared-mode 您可以通过 azure portal

检查

这很可能不是你的问题,只是一个想法/需要检查的东西。

回答我自己的问题:

问题是在某些移动设备上使用旧版本的 Intune 公司门户应用程序。更新到最新版本后就可以了