尝试获取访问令牌请求Azure AD时invalid_grant

时间:2015-04-21 13:22:39

标签: php rest azure office365

我正在尝试从Azure广告获取访问令牌,如下面的链接所述。我需要使用office 365 REST API。

msdn.microsoft.com/en-us/library/azure/dn645542.aspx

授权代码请求成功,我在返回URL中获取代码。但Access令牌请求失败,我得到的响应如下所示。

stdClass Object
(
    [error] => invalid_grant
    [error_description] => AADSTS70002: Error validating credentials. AADSTS70000: The provided access grant is invalid or malformed.
Trace ID: baf9f98a-655d-48e1-bc30-021a7d57effa
Correlation ID: 5030b57f-42e2-403a-ab3c-cfc970d886e2
Timestamp: 2015-04-21 12:58:00Z
    [error_codes] => Array
        (
            [0] => 70002
            [1] => 70000
        )

    [timestamp] => 2015-04-21 12:58:00Z
    [trace_id] => baf9f98a-655d-48e1-bc30-021a7d57effa
    [correlation_id] => 5030b57f-42e2-403a-ab3c-cfc970d886e2
    [submit_url] => 
    [context] => 
)

以下是我的代码:

$url = "https://login.windows.net/<tenant-id>/oauth2/token";
            $postUrlData = "grant_type=authorization_code&client_id=$clientId&code=$authCode&redirect_uri=$redirectUri&client_secret=$secretKey";
            $headers = array(
                'Content-type: application/x-www-form-urlencoded',
                'Content-length: '. strlen($postUrlData)
            );
            //echo $postUrlData;die;
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS , $postUrlData);
            curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $result = curl_exec($ch);            
            $res = json_decode($result);            
            curl_close($ch);

你能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:0)

看看这个PHP示例:https://github.com/jasonjoh/php-calendar。具体来说,请查看https://github.com/jasonjoh/php-calendar/blob/master/o365/Office365Service.php中的getTokenFromAuthCode函数。