获取刷新令牌展望 REST API OAuth PHP


Get Refresh Token Outlook REST API OAuth PHP

我完成了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();