晓夏

小皇

教育信息化方案砖家

Oauth 2.0认证,PHP代码示例

浏览量:757

这个代码是院里的一位同学写的,上海交大的统一账户认证,使用Oauth2.0机制,效果如何,还需要自己体验

    function request_post($url = '', $post_data = array()) {
        if (empty($url) || empty($post_data)) {
            return false;
        }
        
        $o = "";
        foreach ( $post_data as $k => $v ) 
        { 
            $o.= $k."=" .$v. "&" ;
        }
        $post_data = substr($o,0,-1);

        $postUrl = $url;
        $curlPost = $post_data;
        $ch = curl_init();//初始化curl
        curl_setopt($ch, CURLOPT_URL, $postUrl); // 要访问的地址
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
        curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($ch, CURLOPT_POST, 1); // 发送一个常规的Post请求
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost); // Post提交的数据包
        curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
        curl_setopt($ch, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        
        $data = curl_exec($ch);//运行curl
        if (curl_errno($ch)) {
           echo 'Errno'.curl_error($ch);//捕抓异常
        }
        curl_close($ch);
        return $data;
    }
if (isset($_GET['code'])) {
    $auth_code = $_GET['code'];
    $url = 'https://jaccount.sjtu.edu.cn/oauth2/token';
    $post_data['grant_type']    = 'authorization_code';
    $post_data['code']          = $auth_code;
    $post_data['redirect_uri']  = '/';
    $post_data['client_id']     = 'ja0623';
    $post_data['client_secret'] = 'C8ECDD98052F2EC01A1A707EA8301';
    $token_json = request_post($url, $post_data);
    $token_info = json_decode($token_json);

    $url = "https://api.sjtu.edu.cn/v1/me/profile?access_token=".$token_info->access_token;
    
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
    curl_setopt($ch, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
    curl_setopt($ch, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
    curl_setopt($ch, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回

    $usr_json = curl_exec($ch);
    curl_close($ch);
    var_dump($usr_json);

    $usr_info = json_decode($usr_json);
    $_SESSION["user_id"]=$usr_info->entities[0]->code;
    $_SESSION["username"]=$usr_info->entities[0]->name;
}


神回复

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。