Microsoft graph api 为甚么要加上;离线“U访问”;使MS Graph作用域无效,否则如何获取刷新令牌?

Microsoft graph api 为甚么要加上;离线“U访问”;使MS Graph作用域无效,否则如何获取刷新令牌?,microsoft-graph-api,Microsoft Graph Api,我正试图从Microsoft Graph请求访问令牌和刷新令牌,但向作用域添加“offline_access”会使作用域无效 这是一项服务,用户允许我们访问Outlook日历一次,之后该服务每20分钟检查一次其日历,查看事件。在请求访问“User.Read”和“Calendars.Read”时,我已设法获得同意并提取数据,但当我添加“脱机访问”时,我收到消息,为输入参数“scope”提供的资源值无效。 我有一个具有所需权限的数组 private静态最终字符串[]访问权限={ "https://g

我正试图从Microsoft Graph请求访问令牌和刷新令牌,但向作用域添加“offline_access”会使作用域无效

这是一项服务,用户允许我们访问Outlook日历一次,之后该服务每20分钟检查一次其日历,查看事件。在请求访问“User.Read”和“
Calendars.Read
”时,我已设法获得同意并提取数据,但当我添加“
脱机访问
”时,我收到消息
,为输入参数“scope”提供的资源值无效。

我有一个具有所需权限的数组

private静态最终字符串[]访问权限={
"https://graph.microsoft.com/User.Read",
"https://graph.microsoft.com/Calendars.Read",
"https://graph.microsoft.com/offline_access",
};
然后对它们进行组合和编码

String encodedScope=URLEncoder.encode(
Arrays.stream(访问权限)
.减少(
(a,b)->a+“”+b)
.get(),“UTF-8”)。替换(“+”,“%20”);
这将导致字符串
https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20https%3A%2F%2Fgraph.microsoft.com%2FCalendars.Read%20https%3A%2F%2Fgraph.microsoft.com%2Foffline\u access
然后我要代币

String appId=“client\u id=“+clientID;
String scope=“&scope=“+encodedScope;
字符串authCode=“&code=“+code;
String redirect=“&redirect_uri=“+redirectUri;
字符串grantType=“&grant\u type=authorization\u code”;
String secret=“&client_secret=“+clientSecret;
String data=appId+scope+authCode+redirect+grantType+secret;
//创建POST请求
URL=新URL(姿势);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
//配置请求
connection.setRequestMethod(“POST”);
connection.setRequestProperty(“内容类型”、“应用程序/x-www-form-urlencoded”);
setRequestProperty(“接受”、“应用程序/json”);
connection.setDoOutput(真);
//发送数据
OutputStream os=connection.getOutputStream();
byte[]inputBytes=data.getBytes(编码);
os.write(inputBytes,0,inputBytes.length);//字节、偏移量、长度
最后一个链接看起来像

https://login.microsoftonline.com/common/oauth2/v2.0/authorize?
client_id=[CLIENT ID]
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Fsport%2Fauth%2Foutlook
&response_mode=query
&scope=https%3A%2F%2Fgraph.microsoft.com%2FUser.Read%20https%3A%2F%2Fgraph.microsoft.com%2FCalendars.Read%20https%3A%2F%2Fgraph.microsoft.com%2Foffline_access
&state=2737
我希望这会返回一个访问令牌和一个刷新令牌,但正如前面提到的,我得到的消息是作用域的资源值无效


服务必须能够刷新令牌,因为它应该在不受干预的情况下运行大约一年。

范围不是
https://graph.microsoft.com/offline_access
,它只是
离线访问
。Offline Access是一个特殊的AAD作用域,它告诉它返回一个刷新令牌,它不是Microsoft Graph作用域


您实际上可以删除
https://graph.microsoft.com/
全面。您需要指定FQDN的唯一时间是从应用程序注册请求默认范围集时(即
https://graph.microsoft.com/.default
)但这通常仅在使用仅应用程序/守护进程身份验证流(客户端凭据)时使用

范围不是
https://graph.microsoft.com/offline_access
,它只是
离线访问
。Offline Access是一个特殊的AAD作用域,它告诉它返回一个刷新令牌,它不是Microsoft Graph作用域

您实际上可以删除
https://graph.microsoft.com/
全面。您需要指定FQDN的唯一时间是从应用程序注册请求默认范围集时(即
https://graph.microsoft.com/.default
)但这通常仅在使用仅应用程序/守护进程身份验证流(客户端凭据)时使用