在阅读本指南后,我的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 的令牌?
答案 0 :(得分:0)
在授权代码授权流程中,用户代理(例如浏览器)应该向授权端点发出GET请求。这是文档中描述的第一步:
- 客户端应用程序通过将用户代理重定向到Azure AD授权端点来启动流程。如果需要同意,用户进行身份验证并同意。
醇>
这是必要的,以便可以进行不同的可能的用户交互。有时会显示用户同意提示,或者可能需要多因素身份验证或联合到用户的本地STS。
用户通过身份验证后,Azure AD会将用户代理重定向回redirect_uri
中指定的URI,包括授权代码作为查询参数。这将导致向您的服务发出GET请求,并使用code
参数来请求访问令牌(现在您将直接从您的服务向Azure AD发出请求)
如果您不想对用户进行身份验证,而是对进行服务到服务身份验证感兴趣,则可以使用不同的流程,如Service to Service Calls Using Client Credentials中所述。