gpt4 book ai didi

java - Play 框架和 Office 365 OAuth

转载 作者:太空宇宙 更新时间:2023-11-04 13:16:20 24 4
gpt4 key购买 nike

我正在编写一个与 Azure Active Directory 交互的 Play Framework 应用程序。我首先简单地提取一些事件,但无法通过初始 token 刷新请求。

private static void getEventsFromOffice365(){
System.out.println("getting from O365");

Promise<String> promise = WS.url("https://login.microsoftonline.com/common/oauth2/token")
.setBody("grant_type=refresh_token&refresh_token=[refresh token]&scope=openid+offline_access+https%3A%2F%2Foutlook.office.com%2Fmail.read+https%3A%2F%2Foutlook.office.com%2Fcalendars.read+https%3A%2F%2Foutlook.office.com%2Fcontacts.read&redirect_uri=https%3A%2F%2Foauthplay.azurewebsites.net%2F&client_id=[client id]&client_secret=[client secret]")
.setContentType("application/x-www-form-urlencoded")
.post("")
.map(
new Function<WSResponse, String>() {
public String apply(WSResponse response) {
System.out.println("Done");
String result = response.getBody();
System.out.println("Result:" + result);
System.out.println("json:" + response.getStatus());

return result;
}
});
}

出于某种原因,每当我运行此程序时,我都会收到 Microsoft 的以下响应。

{"error":"invalid_request","error_description":"AADSTS90014: The request body must contain the following parameter: 'grant_type'.\r\nTrace ID: 6a3c1620-6f4d-4c53-a077-cf1f842c0332\r\nCorrelation ID: 0caba711-d434-4ce9-b15e-a56e27ea5a0f\r\nTimestamp: 2015-11-02 23:31:17Z","error_codes":[90014],"timestamp":"2015-11-02 23:31:17Z","trace_id":"6a3c1620-6f4d-4c53-a077-cf1f842c0332","correlation_id":"0caba711-d434-4ce9-b15e-a56e27ea5a0f"}

如您所见,我在帖子正文中声明了 grant_type。为什么我会收到此错误以及如何解决它?

最佳答案

来自官方documents ,您可以使用setQueryParameter传递你的参数。我建议您可以引用以下代码:

WSRequestHolder req=WS.url("https://login.microsoftonline.com/common/oauth2/token");

req.setQueryParameter("grant_type", refresh_token );
req.setQueryParameter("refresh_token ", refresh_token);
req.setQueryParameter("redirect_uri",REDIRECT_URI);
req.setQueryParameter("scope", scope);
req.setQueryParameter("client_secret ", client_secret);
req.setQueryParameter("client_id ", client_id);
req.setContentType("application/x-www-form-urlencoded")
req.map(
new Function<WSResponse, String>() {
public String apply(WSResponse response) {
System.out.println("Done");
String result = response.getBody();
System.out.println("Result:" + result);
System.out.println("json:" + response.getStatus());

return result;
}
});

同时,我建议您可以尝试使用 execute 方法而不是 post 方法,如下所示:

. execute(“post”)

有任何结果请告诉我。

关于java - Play 框架和 Office 365 OAuth,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33489018/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com