首页 > 解决方案 > MSAL4J 集成 Windows 身份验证 - MSAL4J 代码中的空引用异常

问题描述

我正在尝试为一个简单的 Java 控制台应用程序做一个 POC,使用此处的链接https://github.com/Azure-Samples/ms-identity-java-desktop/tree/master/中的演示代码原样访问 Graph API 集成 Windows 身份验证流程

代码因以下异常而中断。Java 似乎在集成身份验证方面存在问题,并且 Null Reference 异常没有给出任何可能出现问题的提示。非常感谢任何帮助或建议。

注意:我的 Java 版本是“1.8.0_261”,我知道应用程序注册步骤正在运行,因为我从 .NET 客户端对其进行了测试。我还能够使用 MSAL for Java 使用户名/密码流正常工作,但集成身份验证存在此问题

[ForkJoinPool.commonPool-worker-1] ERROR com.microsoft.aad.msal4j.PublicClientApplication - [Correlation ID: ec8337fa-d27e-4f39-83f5-a1f99984d469] Execution of class  com.microsoft.aad.msal4j.AcquireTokenByAuthorizationGrantSupplier failed.
java.lang.NullPointerException
        at com.microsoft.aad.msal4j.WSTrustResponse.parse(WSTrustResponse.java:74)
        at com.microsoft.aad.msal4j.WSTrustRequest.execute(WSTrustRequest.java:48)
        at com.microsoft.aad.msal4j.WSTrustRequest.execute(WSTrustRequest.java:89)
        at com.microsoft.aad.msal4j.AcquireTokenByAuthorizationGrantSupplier.getAuthorizationGrantIntegrated(AcquireTokenByAuthorizationGrantSupplier.java:126)
        at com.microsoft.aad.msal4j.AcquireTokenByAuthorizationGrantSupplier.execute(AcquireTokenByAuthorizationGrantSupplier.java:40)
        at com.microsoft.aad.msal4j.AuthenticationResultSupplier.get(AuthenticationResultSupplier.java:59)
        at com.microsoft.aad.msal4j.AuthenticationResultSupplier.get(AuthenticationResultSupplier.java:17)
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(Unknown Source)
        at java.util.concurrent.CompletableFuture$AsyncSupply.exec(Unknown Source)
        at java.util.concurrent.ForkJoinTask.doExec(Unknown Source)

更新:从提琴手跟踪,我能够看到我的 .NET 应用程序正在使用 NTLM,并且演示文档说 MSAL4J 需要 Kerberos。我假设我的环境中没有打开 Kerberos。

标签: javamsal

解决方案


MSAL Java 期望 Kerberos 票证可用。您可以在测试时通过运行Kinit生成一个,它是 JDK 的一部分。

请注意,在运行 kinit 之前,计算机必须加入域,并且用户应该是密钥分发中心的主体。


推荐阅读