PHP cURL验证服务器上的Facebook API登录访问令牌?

PHP cURL验证服务器上的Facebook API登录访问令牌?,php,facebook,api,curl,login,Php,Facebook,Api,Curl,Login,有谁可以分享一个工作示例,说明如何使用我从浏览器获得的Facebook access_令牌在我的PHP服务器上进行验证,以便我可以验证浏览器的登录详细信息是否可信,然后在我的服务器上为我的用户安全创建会话 回顾一下,我想做的步骤是: 用户在浏览器上单击“继续使用Facebook”,并获得访问令牌 我将其发送到我的PHP服务器 服务器向Facebook发送一个cURL请求,以验证用户访问令牌 如果access_令牌有效,则在我的服务器上为用户创建会话 我有自己的应用程序,包括电子邮件、谷歌和Fac

有谁可以分享一个工作示例,说明如何使用我从浏览器获得的Facebook access_令牌在我的PHP服务器上进行验证,以便我可以验证浏览器的登录详细信息是否可信,然后在我的服务器上为我的用户安全创建会话

回顾一下,我想做的步骤是:

  • 用户在浏览器上单击“继续使用Facebook”,并获得访问令牌
  • 我将其发送到我的PHP服务器
  • 服务器向Facebook发送一个cURL请求,以验证用户访问令牌
  • 如果access_令牌有效,则在我的服务器上为用户创建会话
  • 我有自己的应用程序,包括电子邮件、谷歌和Facebook登录。谢谢你的帮助,谢谢

    过了一段时间,我得到了一个可用的PHP脚本。

    只需替换缺少的变量值,它就会工作。也使 确保使用phpinfo()或其他方法在PHP服务器上运行cURL

    
    
    特别感谢

    过了一段时间,我得到了一个可用的PHP脚本。

    只需替换缺少的变量值,它就会工作。也使 确保使用phpinfo()或其他方法在PHP服务器上运行cURL

    
    

    特别感谢

    您到目前为止有没有?@Obsidiase感谢您的快速回复。是的!我尝试搜索stackoverflow很长一段时间,寻找一个php脚本,但没有找到。所以我必须自己做。我在下面分享。我希望它能帮助别人!“到目前为止你还记得吗?”黑曜石感谢你的快速回复。是的!我尝试搜索stackoverflow很长一段时间,寻找一个php脚本,但没有找到。所以我必须自己做。我在下面分享。我希望它能帮助别人!使用官方的PHP SDK,您会有更好的体验,它可以为您完成所有这些工作(以更干净、经过良好测试的方式)。@ceejayoz感谢您提供的提示和链接,我相信有人会从这种方法中受益。就我个人而言,我只是不想在我的服务器上使用Facebook代码。我喜欢最小化攻击面。也许我只是喜欢艰苦的生活!无论如何,谢谢。@kintsukuroi我可以查看完整的工作示例吗?您可以添加Github吗?使用官方的PHP SDK,您会有更好的体验,它可以为您完成所有这些工作(以更干净、经过良好测试的方式)。@ceejayoz感谢您提供的提示和链接,我相信有人会从这种方法中受益。就我个人而言,我只是不想在我的服务器上使用Facebook代码。我喜欢最小化攻击面。也许我只是喜欢艰苦的生活!无论如何,谢谢。@kintsukuroi我可以查看完整的工作示例吗,您可以在Github中添加吗?
    <?php
    
    ///////////////////////////////////////
    // prep Facebook verification
    ///////////////////////////////////////
    
    // sanitize login data
    $_POST['facebook_access_token'] = filter_var($_POST['facebook_access_token'], FILTER_SANITIZE_STRING);
    
    // set variables
    $facebook_user_access_token = $_POST['facebook_access_token'];
    $my_facebook_app_id = 'REPLACE';
    $my_facebook_app_secret = 'REPLACE';
    $facebook_application = 'REPLACE'; // in my case 'domain.com', as set up in Facebook
    
    ///////////////////////////////////////
    // get facebook access token
    ///////////////////////////////////////
    $curl_facebook1 = curl_init(); // start curl
    $url = "https://graph.facebook.com/oauth/access_token?client_id=".$my_facebook_app_id."&client_secret=".$my_facebook_app_secret."&grant_type=client_credentials"; // set url and parameters
    curl_setopt($curl_facebook1, CURLOPT_URL, $url); // set the url variable to curl
    curl_setopt($curl_facebook1, CURLOPT_RETURNTRANSFER, true); // return output as string
    $output = curl_exec($curl_facebook1); // execute curl call
    curl_close($curl_facebook1); // close curl
    $decode_output = json_decode($output, true); // decode the response (without true this will crash)
    
    // store access_token
    $facebook_access_token = $decode_output['access_token'];
    
    ///////////////////////////////////////
    // verify my access was legitimate
    ///////////////////////////////////////
    $curl_facebook2 = curl_init(); // start curl
    $url = "https://graph.facebook.com/debug_token?input_token=".$facebook_user_access_token."&access_token=".$facebook_access_token; // set url and parameters
    curl_setopt($curl_facebook2, CURLOPT_URL, $url); // set the url variable to curl
    curl_setopt($curl_facebook2, CURLOPT_RETURNTRANSFER, true); // return output as string
    $output2 = curl_exec($curl_facebook2); // execute curl call
    curl_close($curl_facebook2); // close curl
    $decode_output2 = json_decode($output2, true); // decode the response (without true this will crash)
    
    // test browser and Facebook variables match for security
    if ($my_facebook_app_id == $decode_output2['data']['app_id'] && $decode_output2['data']['application'] == $facebook_application && $decode_output2['data']['is_valid'] == true) {
        echo 'Success. Login is valid.';
    }
    else {
        echo 'Error.';
    }
    
    ?>