0

我的REST请求看起来像这样后,我通过这个指南阅读:How to Authorize to Microsoft Azure-ADAzure的AD的OAuth 2.0代码进行授权与Java新泽西

Client cli = ClientBuilder.newClient(); 
WebTarget webTar = cli.target("https://login.microsoftonline.com/yyyyy.onmicrosoft.com/oauth2/authorize").queryParam("response_type", "code"); 
webTar = webTar.queryParam("client_id", "ed4d67dc-34a8-4eb3-9058-49f39yyyyyy"); 
webTar = webTar.queryParam("redirect_uri", URLEncoder.encode("https://xyxyxyx.onmicrosoft.com/o365jso", "UTF-8")); 
String response = webTar.request(MediaType.APPLICATION_JSON).get(String.class); 

但是我收到一个完整的HTML作为响应,这得出结论端点认为我是一个浏览器。有没有办法以某种方式正确地进行(以授权方的URL的形式)接收授权码,然后访问令牌为Sharepoint/Exchange事后与Java泽西?

回答

0

在授权代码授权流程中,用户代理(例如浏览器)应该向授权端点发出GET请求。这是文献中描述的第一步:

  1. 客户端应用程序通过重定向用户代理向天青AD授权端点开始流动。如果需要同意,用户认证并同意。

这是必要的,以便发生不同的可能的用户交互。有时会显示用户意见提示,或者可能是多因素身份验证,或者需要联合用户的本地STS。

用户通过身份验证后,Azure AD会将用户代理重定向回redirect_uri中指定的URI,包括授权代码作为查询参数。这将导致对您的服务发出GET请求,您可以使用code参数请求访问令牌(现在您的直接从您的服务向Azure AD发出请求)。

如果您没有对用户进行身份验证,而是有兴趣进行服务到服务身份验证,那么您将使用不同的流程,如Service to Service Calls Using Client Credentials中所述。