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编写一个简单的路由类
Apr 13 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
May 15 PHP
简单实用的.net DataTable导出Execl
Oct 28 PHP
php中debug_backtrace、debug_print_backtrace和匿名函数用法实例
Dec 01 PHP
php判断两个浮点数是否相等的方法
Mar 14 PHP
两种php去除二维数组的重复项方法
Nov 04 PHP
初识ThinkPHP控制器
Apr 07 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
PHP与JavaScript针对Cookie的读写、交互操作方法详解
Aug 07 PHP
如何在Laravel5.8中正确地应用Repository设计模式
Nov 26 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
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
PHP Primary script unknown 解决方法总结
2019/08/22 PHP
laravel实现于语言包的完美切换方法
2019/09/29 PHP
javascript Keycode对照表
2009/10/24 Javascript
跟我一起学写jQuery插件开发方法(附完整实例及下载)
2010/04/01 Javascript
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
JS 各种网页尺寸判断实例方法
2013/04/18 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
jquery validate 自定义验证方法介绍 日期验证
2014/02/27 Javascript
以jQuery中$.Deferred对象为例讲解promise对象是如何处理异步问题
2015/11/13 Javascript
学习JavaScript设计模式之责任链模式
2016/01/18 Javascript
实例详解ECMAScript5中新增的Array方法
2016/04/05 Javascript
jquery实现ajax提交表单信息的简单方法(推荐)
2016/08/24 Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
2016/11/04 Javascript
Vuejs 组件——props数据传递的实例代码
2017/03/07 Javascript
vue跨域解决方法
2017/10/15 Javascript
自定义vue组件发布到npm的方法
2018/05/09 Javascript
详解微信JS-SDK选择图片遇到的坑
2018/08/15 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
[02:05]2014DOTA2西雅图邀请赛 专访啸天mik夫妻档
2014/07/08 DOTA
[00:32]2018DOTA2亚洲邀请赛Newbee出场
2018/04/03 DOTA
下载给定网页上图片的方法
2014/02/18 Python
python机器学习理论与实战(一)K近邻法
2021/01/28 Python
python3使用SMTP发送HTML格式邮件
2018/06/19 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
2020/09/25 Python
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
学习心得体会
2014/01/01 职场文书
业务部主管岗位职责
2014/01/29 职场文书
八年级语文教学反思
2014/02/11 职场文书
会议室标语
2014/06/21 职场文书
奥巴马上海演讲稿
2014/09/10 职场文书
春节慰问简报
2015/07/21 职场文书
公司酒会致辞
2015/07/30 职场文书
Canvas三种动态画圆实现方法说明(小结)
2021/04/16 Javascript