获取刷新令牌Outlook REST API OAuth PHP

时间:2016-03-02 17:44:49

标签: php api rest oauth outlook

我完成了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数据中没有刷新令牌。

似乎无法获得刷新令牌。

有没有人成功这样做过?怎么样?

2 个答案:

答案 0 :(得分:1)

使用沙箱https://oauthplay.azurewebsites.net我发现了答案

在请求中使用

范围= +的OpenID + offline_access

所以将offline_access添加到您的范围,refresh_token就是发送

答案 1 :(得分:0)

谢谢!我不能相信这个可怕的文件。这是我如何建立我的网址。我需要能够通过用户发送电子邮件。仍在努力尝试获取用户的电子邮件......

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();