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 相关文章推荐
php的header和asp中的redirect比较
Oct 09 PHP
社区(php&amp;&amp;mysql)五
Oct 09 PHP
php 从数据库提取二进制图片的处理代码
Sep 09 PHP
php getimagesize 上传图片的长度和宽度检测代码
May 15 PHP
PHP 冒泡排序算法的实现代码
Aug 08 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
PHP 常用数组内部函数(Array Functions)介绍
Jun 05 PHP
Symfony2使用Doctrine进行数据库查询方法实例总结
Mar 18 PHP
php获取本机真实IP地址实例代码
Mar 31 PHP
Yii隐藏URL中index.php的方法
Jul 12 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
Nov 09 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 显示客户端IP与服务器IP的代码
2010/10/12 PHP
php中socket的用法详解
2014/10/24 PHP
JavaScript实现滚动栏效果的方法
2015/04/27 PHP
php parse_str() 函数的定义和用法
2016/05/23 PHP
通过Javascript将数据导出到外部Excel文档的函数代码
2012/06/15 Javascript
Jquery实现控件的隐藏和显示实例
2014/02/08 Javascript
Javascript高级技巧分享
2014/02/25 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
js中iframe调用父页面的方法
2014/10/30 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
jQuery的事件委托实例分析
2015/07/15 Javascript
JavaScript实现斗地主游戏的思路
2016/02/29 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
使用BootStrap和Metroui设计的metro风格微网站或手机app界面
2016/10/21 Javascript
RequireJS简易绘图程序开发
2016/10/28 Javascript
javascript使用递归算法求两个数字组合功能示例
2017/01/03 Javascript
Vue报错:Uncaught TypeError: Cannot assign to read only property’exports‘ of object’#‘的解决方法
2017/06/17 Javascript
vue.js学习之UI组件开发教程
2017/07/03 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
python解决汉字编码问题:Unicode Decode Error
2017/01/19 Python
Python实现矩阵转置的方法分析
2017/11/24 Python
Django框架文件上传与自定义图片上传路径、上传文件名操作分析
2019/05/10 Python
Django框架模型简单介绍与使用分析
2019/07/18 Python
python多线程使用方法实例详解
2019/12/30 Python
Pycharm修改python路径过程图解
2020/05/22 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
浅谈keras 的抽象后端(from keras import backend as K)
2020/06/16 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
超级英雄、电影和电视、乐队和音乐T恤:Loud Clothing
2019/09/01 全球购物
学生的自我鉴定范文
2013/10/24 职场文书
李敖北大演讲稿
2014/05/24 职场文书
党员志愿者活动方案
2014/08/28 职场文书
新闻学专业职业生涯规划范文:我的人生我做主
2014/09/12 职场文书
2015年财务工作总结范文
2015/03/31 职场文书
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS