我完成了PHP教程 https://dev.outlook.com/RestGettingStarted/Tutorial/php完成了整个 Rest API 文档 https://msdn.microsoft.com/en-us/office/office365/api/contacts-rest-operations一切正常,但 60 分钟后连接丢失。我需要刷新令牌才能获取新的访问令牌。但是我从未收到过刷新令牌,也无法获得它。在互联网上查找了此论坛的一般OAuth文档和问题。
尝试了各种解决方案,没有任何效果。
$token_request_data = array(
"grant_type" => "authorization_code",
'always_issue_new_refresh_token' => true,
'refresh_token_lifetime' => 2419200,
'approval_prompt'=>'force',
'access_type'=>'offline',
'prompt'=>'consent',
'approval_prompt'=>'force',
"code" => $authCode,
"redirect_uri" => self::$redirectUri,
"scope" => implode(" ", self::$scopes),
"client_id" => self::$clientId,
"client_secret" => self::$clientSecret
);
它被告知刷新令牌仅在首次注册应用后发送。
因此,我创建了一个完整的新应用程序并登录。但回复的 JSON 数据中没有刷新令牌。
似乎不可能获得刷新令牌。
有人成功做到这一点吗?如何?
有了沙盒 https://oauthplay.azurewebsites.net 我发现了答案
在请求
中使用范围=开放ID+offline_access+
因此,将offline_access添加到您的范围,refresh_token是发送的
谢谢!我简直不敢相信可怕的文件。这是我如何构建我的网址的。我需要能够通过用户发送电子邮件。仍在努力尝试获取用户的电子邮件...
return USER_OAUTH2_AUTHORIZE_URL
+ "?client_id=" + config.getClientId()
+ "&redirect_uri=" + getOutlookLoginRedirect(request)
+ "&response_type=code"
+ "&scope=https%3A%2F%2Foutlook.office.com%2Fmail.send offline_access openid"
+ "&state=" + crypto.generateSignedToken();