PHP Oauth授权和本地加密实现方法


Posted in PHP onAugust 12, 2016

1.Oauth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方

关键字:appKey appSecret token(令牌)

2.SSO授权

如果本地手机装有微博客户端,则直接跳转到微博客户端,只需点击授权按钮,就可以登陆了 

qq第三方登陆使用Oauth2.0实现,测试代码

点击下面的连接

https://graph.qq.com/oauth2.0/authorize?response_type=code&client_id=101334262&redirect_uri=http://www.qingguow.cn/sso.php

具体代码sso.php文件:

<?php
// qq登陆类
class Sso{
  const APP_ID="101334262";
  const APP_KEY="xxxxxxxxxxxxxxx";
  //初始化
  public static function init(){
    header("content-type:text/html;charset=utf-8");
  }
    //主函数
  public static function main(){
    //请求控制
    $action=$_GET['action'];
    if(!empty($action)){
      Sso::$action();
      return;
    }
    
    $par = 'grant_type=authorization_code'
    . '&client_id='.Sso::APP_ID
    . '&client_secret='.Sso::APP_KEY
    . '&code='.$_REQUEST['code']
    . '&redirect_uri='.urlencode('http://www.qingguow.cn/sso.php');
    $rec=Sso::postUrlContents("https://graph.qq.com/oauth2.0/token",$par);
    if(strpos($rec, 'access_token') !== false) {
      parse_str($rec, $accessToken);
      $openidJson=Sso::getUrlContents("https://graph.qq.com/oauth2.0/me?callback=callback&access_token={$accessToken['access_token']}");
      $openidJson=str_replace("callback( ", "", $openidJson);
      $openidJson=str_replace(");", "", $openidJson);
      $openidJson=json_decode($openidJson,true);
      header("location:sso.php?action=getQQinfo&openid={$openidJson['openid']}&access_token={$accessToken['access_token']}");
    }
  }
  //获取用户信息
  public static function getQQinfo(){
    Sso::init();
    $openid=$_GET['openid'];
    $access_token=$_GET['access_token'];
    $userJson=Sso::getUrlContents("https://graph.qq.com/user/get_user_info?openid={$openid}&access_token={$access_token}&oauth_consumer_key=".Sso::APP_ID);
    $user=json_decode($userJson,true);
    print_r($user);
  }
  //get方式请求数据
  public static function getUrlContents($url){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $result = curl_exec($ch);
    curl_close($ch);
    return $result;
  }
  //post请求数据
  public static function postUrlContents($url,$data = null){
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)){
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
  }

}
Sso::main();

以上这篇PHP Oauth授权和本地加密实现方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
IIS6的PHP最佳配置方法
Mar 19 PHP
php获取mysql版本的几种方法小结
Mar 25 PHP
PHP 读取文件内容代码(txt,js等)
Dec 06 PHP
基于wordpress主题制作的具体实现步骤
May 10 PHP
php一些错误处理的方法与技巧总结
Aug 10 PHP
PHP获取当前url的具体方法全面解析
Nov 26 PHP
Laravel 中获取上一篇和下一篇数据
Jul 27 PHP
php图像处理类实例
Jul 28 PHP
修改Laravel5.3中的路由文件与路径
Aug 10 PHP
php利用header函数下载各种文件
Aug 24 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
swoole_process实现进程池的方法示例
Oct 29 PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 #PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 #PHP
PHP请求Socket接口测试实例
Aug 12 #PHP
php+jquery+html实现点击不刷新加载更多的实例代码
Aug 12 #PHP
php网页版聊天软件实现代码
Aug 12 #PHP
PHP 自动加载的简单实现(推荐)
Aug 12 #PHP
py文件转exe时包含paramiko模块出错解决方法
Aug 12 #PHP
You might like
PHP COOKIE设置为浏览器进程
2009/06/21 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
2013/08/07 PHP
php将mysql数据库整库导出生成sql文件的具体实现
2014/01/08 PHP
从PHP的源码中深入了解stdClass类
2014/04/18 PHP
WordPress开发中用于标题显示的相关函数使用解析
2016/01/07 PHP
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
jQuery解析XML文件同时动态增加js文件的方法
2015/06/01 Javascript
jQuery检测返回值的数据类型
2015/07/13 Javascript
javascript实现tab切换特效
2015/11/12 Javascript
js重写方法的简单实现
2016/07/10 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
vue-cli 引入jQuery,Bootstrap,popper的方法
2018/09/03 jQuery
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
ant-design-vue按需加载的坑的解决
2020/05/14 Javascript
微信小程序组件生命周期的踩坑记录
2021/03/03 Javascript
Python语言生成水仙花数代码示例
2017/12/18 Python
python判断完全平方数的方法
2018/11/13 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Opencv常见图像格式Data Type及代码实例
2020/11/02 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
2020/11/17 Python
CSS3 3D旋转rotate效果实例介绍
2016/05/03 HTML / CSS
伦敦剧院门票:London Theatre Direct
2018/11/21 全球购物
巴西最大的玩具连锁店:Ri Happy
2020/06/17 全球购物
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
母亲节感恩活动记录
2014/03/16 职场文书
《开国大典》教学反思
2014/04/19 职场文书
考察现实表现材料
2014/05/19 职场文书
平安建设工作方案
2014/06/02 职场文书
环卫工作汇报材料
2014/10/28 职场文书
学年个人总结范文
2015/03/05 职场文书
党支部审查意见
2015/06/02 职场文书