簡體   English   中英

為什么使用 Azure 圖表 SDK 收到 400 錯誤請求?

[英]Why I'm getting 400 Bad Request with Azure Graph SDK?

我正在嘗試使用 Microsoft Graph SDK 驗證 Azure Active Directory 中是否存在用戶 email,但我收到了 400 錯誤請求。 這是嘗試執行此操作的 Java/Spring 中的代碼。 此代碼實際上是從微軟網站的 Azure 文檔中提取的:

@RequestMapping( value="/hello/{email}", method= RequestMethod.GET )
public ResponseEntity<User> holaMundo(@PathVariable("email") String email)
{
    List<String> scopes = new ArrayList<String>();
    scopes.add(".default");

    String clientId = "5XXXXXX-XXXX-XXXX-XXXX-XXXX1d9c7c0";
    String clientSecret = "GXXXX~zDXXXX~N6XXXXau7mXXXXEIDmaiWXr";
    String tenantId = "39XXXX31-XXXX-XXXX-XXXX-14fXXXX4db8f";

    final ClientSecretCredential clientSecretCredential = new ClientSecretCredentialBuilder()
            .clientId(clientId)
            .clientSecret(clientSecret)
            .tenantId(tenantId)
            .build();

    final TokenCredentialAuthProvider tokenCredentialAuthProvider =
            new TokenCredentialAuthProvider(scopes, clientSecretCredential);

    final GraphServiceClient graphClient =
            GraphServiceClient
                    .builder()
                    .authenticationProvider(tokenCredentialAuthProvider)
                    .buildClient();

    User resultUser =  null;

    try {
        UserCollectionRequest ucr = graphClient.users().buildRequest().filter(email);

        UserCollectionPage ucp = ucr.get();         // Here is the error
        List<User> result = ucp.getCurrentPage();
        User u = result.get(0);
        return new ResponseEntity<>(resultUser, HttpStatus.OK);
    }
    catch (IndexOutOfBoundsException e) {}

    return new ResponseEntity<>(null, HttpStatus.OK);

}

在 UserCollectionRequest 處引發錯誤或異常:

UserCollectionPage ucp = ucr.get();         // Here is the error

這是錯誤的output:

2021-12-06 11:51:51.626  INFO 16828 --- [onPool-worker-1] c.azure.identity.ClientSecretCredential  : Azure Identity => getToken() result for scopes [.default]: SUCCESS
2021-12-06 11:51:54.287 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406Graph service exception Error code: BadRequest
2021-12-06 11:51:54.288 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406Error message: Invalid filter clause
2021-12-06 11:51:54.288 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406
2021-12-06 11:51:54.288 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406GET https://graph.microsoft.com/v1.0/users?%24filter=fernando.rivas%40avianca.com
2021-12-06 11:51:54.289 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406SdkVersion : graph-java/v5.8.0
2021-12-06 11:51:54.289 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406
2021-12-06 11:51:54.289 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406
2021-12-06 11:51:54.289 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406400 : Bad Request
2021-12-06 11:51:54.290 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406[...]
2021-12-06 11:51:54.290 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406
2021-12-06 11:51:54.290 ERROR 16828 --- [nio-8080-exec-2] global                                   : CoreHttpProvider[sendRequestInternal] - 406[Some information was truncated for brevity, enable debug logging for more details]
2021-12-06 11:51:54.290 ERROR 16828 --- [nio-8080-exec-2] global                                   : Throwable detail: com.microsoft.graph.http.GraphServiceException: Error code: BadRequest
Error message: Invalid filter clause

GET https://graph.microsoft.com/v1.0/users?%24filter=fernando.rivas%40avianca.com
SdkVersion : graph-java/v5.8.0


400 : Bad Request
[...]

[Some information was truncated for brevity, enable debug logging for more details]
2021-12-06 11:51:54.297 ERROR 16828 --- [nio-8080-exec-2] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is com.microsoft.graph.http.GraphServiceException: Error code: BadRequest
Error message: Invalid filter clause

GET https://graph.microsoft.com/v1.0/users?%24filter=fernando.rivas%40avianca.com
SdkVersion : graph-java/v5.8.0


400 : Bad Request
[...]

[Some information was truncated for brevity, enable debug logging for more details]] with root cause

com.microsoft.graph.http.GraphServiceException: Error code: BadRequest
Error message: Invalid filter clause

GET https://graph.microsoft.com/v1.0/users?%24filter=fernando.rivas%40avianca.com
SdkVersion : graph-java/v5.8.0


400 : Bad Request
[...]

[Some information was truncated for brevity, enable debug logging for more details]
    at com.microsoft.graph.http.GraphServiceException.createFromResponse(GraphServiceException.java:419) ~[microsoft-graph-core-2.0.10.jar:na]
    at com.microsoft.graph.http.GraphServiceException.createFromResponse(GraphServiceException.java:378) ~[microsoft-graph-core-2.0.10.jar:na]
    at com.microsoft.graph.http.CoreHttpProvider.handleErrorResponse(CoreHttpProvider.java:511) ~[microsoft-graph-core-2.0.10.jar:na]
    at com.microsoft.graph.http.CoreHttpProvider.processResponse(CoreHttpProvider.java:440) ~[microsoft-graph-core-2.0.10.jar:na]
    at com.microsoft.graph.http.CoreHttpProvider.sendRequestInternal(CoreHttpProvider.java:406) ~[microsoft-graph-core-2.0.10.jar:na]
    at com.microsoft.graph.http.CoreHttpProvider.send(CoreHttpProvider.java:223) ~[microsoft-graph-core-2.0.10.jar:na]
    at com.microsoft.graph.http.CoreHttpProvider.send(CoreHttpProvider.java:200) ~[microsoft-graph-core-2.0.10.jar:na]
    at com.microsoft.graph.http.BaseCollectionRequest.send(BaseCollectionRequest.java:102) ~[microsoft-graph-core-2.0.10.jar:na]
    at com.microsoft.graph.http.BaseEntityCollectionRequest.get(BaseEntityCollectionRequest.java:78) ~[microsoft-graph-core-2.0.10.jar:na]
    at com.pbi336328.adverifyuser.Pbi336328.holaMundo(Pbi336328.java:56) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_301]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_301]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_301]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_301]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.8.jar:5.3.8]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1063) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.48.jar:4.0.FR]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.8.jar:5.3.8]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.48.jar:4.0.FR]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:228) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.8.jar:5.3.8]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.8.jar:5.3.8]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.8.jar:5.3.8]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.8.jar:5.3.8]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.8.jar:5.3.8]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.8.jar:5.3.8]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:190) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:163) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1723) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_301]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_301]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-9.0.48.jar:9.0.48]
    at java.lang.Thread.run(Thread.java:748) [na:1.8.0_301]

看起來您提供過濾器的方式導致錯誤,您可能需要傳遞過濾器字符串,例如 email='your-email-here' 或作為request option ,否則 API 不知道您正在過濾或搜索哪個屬性. 請參閱此問題,該問題嘗試按用戶的display name進行搜索,並且還使用了request option And, when you query the MS Graph API using sdk, while applying $filter, $search, you must set additional HTTP header ConsistencyLevel = eventual and also pass the $count , as per the official doc , and this page in particular

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM