Azure AD用户使用ADAL 4j在java中进行身份验证提供"请求正文必须包含以下参数:' client_secret或client_assertion"

时间:2015-10-01 10:15:58

标签: java authentication azure

我正在尝试从here编写Azure AD用户身份验证代码。 我正在提交有效的客户端ID,用户名,密码,租户ID,资源ID。

它给了我以下错误:

  

java.util.concurrent.ExecutionException:com.microsoft.aad.adal4j.AuthenticationException:{" error":" invalid_request"," error_description":& #34; AADSTS90014:请求正文必须包含以下参数:' client_secret或client_assertion'。\ r \ nTrace ID:7f98c473-96f9-48bd-b1ee-73dad520c226 \ r \ n相关ID:35a8f4d9-bdb1- 4dbe-ac58-5c41473ee3d1 \ r \ n时间戳:2015-10-01 09:03:02Z"}

完整堆栈跟踪是:

  

输入用户名:xxxxxxx输入密码:xxxxxxx SLF4J:无法加载   class" org.slf4j.impl.StaticLoggerBinder"。 SLF4J:默认为   无操作(NOP)记录器实现SLF4J:请参阅   http://www.slf4j.org/codes.html#StaticLoggerBinder进一步说明   细节。 java.util.concurrent.ExecutionException:   com.microsoft.aad.adal4j.AuthenticationException:   {"错误":" invalid_request"," error_description":" AADSTS90014:The   请求正文必须包含以下参数:' client_secret或   client_assertion'。\ r \ nTrace ID:   7f98c473-96f9-48bd-b1ee-73dad520c226 \ r \ n相关ID:   35a8f4d9-bdb1-4dbe-ac58-5c41473ee3d1 \ r \ n时间戳:2015-10-01   09:03:02Z"} at   java.util.concurrent.FutureTask.report(FutureTask.java:122)at   java.util.concurrent.FutureTask.get(FutureTask.java:188)at   PublicClient.getAccessTokenFromUserCredentials(PublicClient.java:47)     在PublicClient.main(PublicClient.java:27)引起:   com.microsoft.aad.adal4j.AuthenticationException:   {"错误":" invalid_request"," error_description":" AADSTS90014:The   请求正文必须包含以下参数:' client_secret或   client_assertion'。\ r \ nTrace ID:   7f98c473-96f9-48bd-b1ee-73dad520c226 \ r \ n相关ID:   35a8f4d9-bdb1-4dbe-ac58-5c41473ee3d1 \ r \ n时间戳:2015-10-01   09:03:02Z"} at   com.microsoft.aad.adal4j.AdalTokenRequest.executeOAuthRequestAndProcessResponse(AdalTokenRequest.java:97)     在   com.microsoft.aad.adal4j.AuthenticationContext.acquireTokenCommon(AuthenticationContext.java:770)     在   com.microsoft.aad.adal4j.AuthenticationContext.access $ 1(AuthenticationContext.java:757)     在   com.microsoft.aad.adal4j.AuthenticationContext $ 1.call(AuthenticationContext.java:130)     在   com.microsoft.aad.adal4j.AuthenticationContext $ 1.call(AuthenticationContext.java:1)     在java.util.concurrent.FutureTask.run(FutureTask.java:262)at   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)     在   java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(ThreadPoolExecutor.java:615)     在java.lang.Thread.run(Thread.java:745)

如何解决异常?

1 个答案:

答案 0 :(得分:0)

AzureAD支持两种流程。一个需要client_secret或client_assertion而另一个不需要。这些有时被称为公共或机密。如果在向Azure添加应用程序时,您选择“Web App”AzureAD需要一个机密客户端,必须显示“证明”以获取令牌。另一方面,公众不需要证明。