Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用MSAL4J用户名密码流验证MS图形_Java_Azure Ad Graph Api_Msal - Fatal编程技术网

Java 无法使用MSAL4J用户名密码流验证MS图形

Java 无法使用MSAL4J用户名密码流验证MS图形,java,azure-ad-graph-api,msal,Java,Azure Ad Graph Api,Msal,我有一个Java Spring启动应用程序,不是web应用程序,只有后端应用程序,我正试图从中调用Microsoft Graph API通过我的应用程序发送邮件 代码运行Cron调度程序,每天在固定时间发送邮件。我的应用程序没有UI,我无法要求用户手动登录 Java代码使用服务帐户进行身份验证。服务帐户是工作帐户而不是个人帐户 我正在使用这个库,我已经在Azure Active Directory中设置了相关的步骤,正如上面提到的那样 我只有授权访问权限,没有应用程序访问权限。并且,我正在使用来

我有一个Java Spring启动应用程序,不是web应用程序,只有后端应用程序,我正试图从中调用Microsoft Graph API通过我的应用程序发送邮件

代码运行Cron调度程序,每天在固定时间发送邮件。我的应用程序没有UI,我无法要求用户手动登录

Java代码使用服务帐户进行身份验证。服务帐户是工作帐户而不是个人帐户

我正在使用这个库,我已经在Azure Active Directory中设置了相关的步骤,正如上面提到的那样

我只有授权访问权限,没有应用程序访问权限。并且,我正在使用来使用服务帐户进行身份验证

这是我正在使用的样本

我可以从组织公司网络VPN中的笔记本电脑本地运行代码

现在,当我将应用程序部署到我的组织公司网络之外的AWS kubernetes群集时,我从MSAL4J库中得到以下错误:

org.xml.sax.SAXParseException: The element type "br" must be terminated by the matching end-tag "</br>".
       at java.xml/com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:261) ~[na:na]
       at java.xml/com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:339) ~[na:na]
       at java.xml/javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:122) ~[na:na]
       at com.microsoft.aad.msal4j.MexParser.getPolicy(MexParser.java:76) ~[msal4j-1.4.0.jar!/:1.4.0]
       at com.microsoft.aad.msal4j.MexParser.getWsTrustEndpointFromMexResponse(MexParser.java:112) ~[msal4j-1.4.0.jar!/:1.4.0]
       at com.microsoft.aad.msal4j.WSTrustRequest.execute(WSTrustRequest.java:62) ~[msal4j-1.4.0.jar!/:1.4.0]
       at com.microsoft.aad.msal4j.AcquireTokenByAuthorizationGrantSupplier.processPasswordGrant(AcquireTokenByAuthorizationGrantSupplier.java:76) ~[msal4j-1.4.0.jar!/:1.4.0]
       at com.microsoft.aad.msal4j.AcquireTokenByAuthorizationGrantSupplier.execute(AcquireTokenByAuthorizationGrantSupplier.java:33) ~[msal4j-1.4.0.jar!/:1.4.0]
       at com.microsoft.aad.msal4j.AuthenticationResultSupplier.get(AuthenticationResultSupplier.java:59) ~[msal4j-1.4.0.jar!/:1.4.0]
       at com.microsoft.aad.msal4j.AuthenticationResultSupplier.get(AuthenticationResultSupplier.java:17) ~[msal4j-1.4.0.jar!/:1.4.0]
       at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1700) ~[na:na]
       at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
MSAL4J库没有任何调试日志,也无法确定导致此错误的原因


有人能帮我找出问题所在吗?

我尝试了您使用的示例代码,但没有发现此错误。令牌和用户名打印在控制台上


错误通常是由编码引起的。调试代码并检查XML的编码。

端点返回的数据不是有效的XML。这可能是因为您无法从网络外部到达端点

你应该考虑使用,而不是用户名密码。解释为什么不应该使用用户名和密码


切换到客户端凭据可能会解决您的问题,因为您不必调用用户名密码调用的WS-Trust端点。

谢谢!可能就是这样,我将尝试实现客户机凭据流。我还尝试了代码,它可以工作