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 18 PHP
phpMyAdmin链接MySql错误 个人解决方案
Dec 28 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
关于shopex同步ucenter的redirect问题,导致script不运行
Apr 10 PHP
PHP删除HTMl标签的三种解决方法
Jun 30 PHP
php操作mysqli(示例代码)
Oct 28 PHP
推荐十款免费 WordPress 插件
Mar 24 PHP
php实现当前页面点击下载文件的简单方法
Sep 22 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
Oct 18 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
php微信小程序解包过程实例详解
Mar 31 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
thinkphp3.x中cookie方法的用法分析
2016/05/19 PHP
PHP反射学习入门示例
2019/06/14 PHP
js parsefloat parseint 转换函数
2010/01/21 Javascript
Jquery实现三层遍历删除功能代码
2013/04/23 Javascript
js 去掉空格实例 Trim() LTrim() RTrim()
2014/01/07 Javascript
JS实现仿百度输入框自动匹配功能的示例代码
2014/02/19 Javascript
通过url查找a元素并点击
2014/04/09 Javascript
Javascript动态引用CSS文件的2种方法介绍
2014/06/06 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
2015/06/05 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
2016/03/29 Javascript
微信小程序 数组中的push与concat的区别
2017/01/05 Javascript
jQuery图片拖动组件Dropzone用法示例
2017/01/17 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
vue-music关于Player播放器组件详解
2017/11/28 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
微信js-sdk 录音功能的示例代码
2019/11/01 Javascript
JavaScript实现Excel表格效果
2020/02/07 Javascript
javascript实现留言板功能
2020/02/08 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
使用numpy和PIL进行简单的图像处理方法
2018/07/02 Python
利用Django-environ如何区分不同环境
2018/08/26 Python
jenkins配置python脚本定时任务过程图解
2019/10/29 Python
Django后台管理系统的图文使用教学
2020/01/20 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
python sitk.show()与imageJ结合使用常见的问题
2020/04/20 Python
HTML5+CSS3实现拖放(Drag and Drop)示例
2014/07/07 HTML / CSS
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
优秀少先队辅导员先进事迹材料
2014/05/18 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
民政局办理协议离婚(范本)
2014/10/25 职场文书
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记