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 相关文章推荐
人大复印资料处理程序_输入篇
Oct 09 PHP
php四种基础算法代码实例
Oct 29 PHP
浅谈PHP中output_buffering
Jul 13 PHP
深入讲解PHP的Yii框架中的属性(Property)
Mar 18 PHP
PHP MySql增删改查的简单实例
Jun 21 PHP
浅谈PHP拦截器之__set()与__get()的理解与使用方法
Oct 18 PHP
遍历指定目录,并存储目录内所有文件属性信息的php代码
Oct 28 PHP
php实现购物车功能(以大苹果购物网为例)
Mar 09 PHP
thinkPHP5框架导出Excel文件简单操作示例
Aug 03 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 PHP
php+mysql实现的无限分类方法类定义与使用示例
May 27 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和ACCESS写聊天室(四)
2006/10/09 PHP
PHP中创建图像并绘制文字的例子
2014/11/19 PHP
jQuery 解析xml文件
2009/08/09 Javascript
jQuery学习笔记之jQuery的DOM操作
2010/12/22 Javascript
浅析JQuery获取和设置Select选项的常用方法总结
2013/07/04 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
jQuery实现简单网页遮罩层/弹出层效果兼容IE6、IE7
2014/06/16 Javascript
JavaScript 基本概念
2015/01/20 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
jQuery mobile转换url地址及获取url中目录部分的方法
2015/12/04 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
详解使用React全家桶搭建一个后台管理系统
2017/11/04 Javascript
使用vue实现grid-layout功能实例代码
2018/01/05 Javascript
angular实现页面打印局部功能的思考与方法
2018/04/13 Javascript
vue打包之后生成一个配置文件修改接口的方法
2018/12/09 Javascript
详解Vue中使用插槽(slot)、聚类插槽
2019/04/12 Javascript
python 转换 Javascript %u 字符串为python unicode的代码
2016/09/06 Python
Python中如何获取类属性的列表
2016/12/26 Python
简单谈谈Python中的元祖(Tuple)和字典(Dict)
2017/04/21 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
python中property属性的介绍及其应用详解
2019/08/29 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
python bluetooth蓝牙信息获取蓝牙设备类型的方法
2019/11/29 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
基于Keras 循环训练模型跑数据时内存泄漏的解决方式
2020/06/11 Python
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
英国简约舒适女装品牌:Great Plains
2018/07/27 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
95%的面试官都会问到的50道Java线程题,附答案
2012/08/03 面试题
中学生国庆节演讲稿2015
2015/07/30 职场文书
高考满分作文赏析(2篇)
2019/08/12 职场文书
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python
Java设计模式之享元模式示例详解
2022/03/03 Java/Android