繁体   English   中英

禁止从Outlook api访问导入联系人

[英]Import contact from Outlook api access forbidden

我正在尝试从通过Oauth2 Microsoft Online连接的当前用户获取所有联系人,我做对了Oauth2,但是当我调用api的URL http://outlook.office.com/api/v1.0/me/contacts我在标题中得到了一个空字符串,它是:

HTTP/1.1 403 Forbidden
Cache-Control: private
Content-Length: 0
Server: Microsoft-IIS/8.5
Set-Cookie: ClientId=QPAIYPSBRKGUWYWEQFBAA; expires=Tue, 27-Sep-2016 12:07:04 GMT; path=/; secure; HttpOnly
request-id: d24bcf29-372e-4bbc-bb7c-f753cde1d1dc
X-CasErrorCode: UserNotFound
X-AspNet-Version: 4.0.30319
X-Powered-By: ASP.NET
X-FEServer: AMSPR03CA0038

没有其他的。

这是我的PHP代码,其中包含OAuth的所有内容。 该代码使用Laravel :)

public function outlook(Request $request)
{
    if($request->session()->has('tokenOutlook'))
    {
        return redirect('/contact/outlook/all');
    }
    else
    {
        if(!$request->has('code'))
        {
            return redirect("https://login.microsoftonline.com/common/oauth2/v2.0/authorize?client_id=".env('APPIDOUTLOOK')."&redirect_uri=".secure_url('/contact/outlook')."&response_type=code&scope=".urlencode("https://outlook.office.com/Contacts.Read"));
        }
        else
        {
            $curl = curl_init("https://login.microsoftonline.com/common/oauth2/v2.0/token");
            curl_setopt($curl, CURLOPT_POST, true);
            $postdata = array(
                "client_id" => env('APPIDOUTLOOK'),
                "code" => $request->get('code'),
                "grant_type"=>"authorization_code",
                "scope" => urlencode("https://outlook.office.com/Contacts.Read"),
                "client_secret" => env('APPSECRETOUTLOOK')
            );
            $fields_string = '';
            foreach($postdata as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
            curl_setopt($curl, CURLOPT_POSTFIELDS, $fields_string);

            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_TIMEOUT, 10);
            $oauth_token = curl_exec($curl);
            curl_close($curl);
            $oauth_token = json_decode($oauth_token);
            //dd($oauth_token)
            $request->session()->put('tokenOutlook', $oauth_token->access_token);
            return redirect('/contact/outlook/all');
        }
    }
}
public function showOutlook(Request $request)
{
    if($request->session()->has('tokenOutlook'))
    {
        //dd($request->session()->get('tokenOutlook'));
        $curl = curl_init('https://outlook.office.com/api/v1.0/me/contacts');
        curl_setopt($curl, CURLOPT_HEADER, true);
        curl_setopt($curl, CURLOPT_VERBOSE, true);

        curl_setopt($curl, CURLOPT_HTTPHEADER, array("Authorization: Bearer ".$request->session()->get('tokenOutlook')));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($curl, CURLOPT_TIMEOUT, 10);
        $contacts = curl_exec($curl);
        $header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
        $header = substr($contacts, 0, $header_size);
        //var_dump($header);
        //dd($curl);
        curl_close($curl);
        $contacts = json_decode($contacts);
        $array_contacts = [];

        return $array_contacts;
    }
    else
    {
        return redirect('/contact/outlook');
    }
}

为什么我的/ me出现UserNotFound错误? :(

我通过在帖子数据中添加redirect_uri解决了我的问题...

$postdata = array(
            "client_id" => env('APPIDOUTLOOK'),
            "code" => $request->get('code'),
            "grant_type"=>"authorization_code",
            "scope" => urlencode("https://outlook.office.com/Contacts.Read"),
            "client_secret" => env('APPSECRETOUTLOOK')
            "redirect_uri" => secure_url('/contact/outlook')
        );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM