使用Java Jersey

时间:2015-07-28 11:50:25

标签: oauth-2.0 jersey-2.0 azure-active-directory office365api

在阅读本指南后,我的REST请求如下所示:How to Authorize to Microsoft Azure-AD

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的形式)接收授权代码,然后使用Java Jersey访问 Sharepoint / Exchange 的令牌?

1 个答案:

答案 0 :(得分:0)

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

  
      
  1. 客户端应用程序通过将用户代理重定向到Azure AD授权端点来启动流程。如果需要同意,用户进行身份验证并同意。
  2.   

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

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

如果您不想对用户进行身份验证,而是对进行服务到服务身份验证感兴趣,则可以使用不同的流程,如Service to Service Calls Using Client Credentials中所述。