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 相关文章推荐
PHP5 字符串处理函数大全
Mar 23 PHP
php调用shell的方法
Nov 05 PHP
php常用文件操作函数汇总
Nov 22 PHP
php防止网站被刷新的方法汇总
Dec 01 PHP
php转换颜色为其反色的方法
Apr 27 PHP
php中使用gd库实现远程图片下载实例
May 12 PHP
php htmlentities()函数的定义和用法
May 13 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
制作个性化的WordPress登陆界面的实例教程
May 21 PHP
php实现文件预览功能
May 23 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
PHP中Session ID的实现原理实例分析
Aug 17 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.1基础知识快速入门
2014/06/19 PHP
php表单敏感字符过滤类
2014/12/08 PHP
PHP使用DirectoryIterator显示下拉文件列表的方法
2015/03/13 PHP
PHP最常用的正则表达式
2017/02/13 PHP
php插入mysql数据返回id的方法
2018/05/31 PHP
50个优秀经典PHP算法大集合 附源码
2020/08/26 PHP
PHP执行系统命令函数实例讲解
2021/03/03 PHP
神奇的代码 通杀各种网站-可随意修改复制页面内容
2008/07/17 Javascript
js单向链表的具体实现实例
2013/06/21 Javascript
jQuery 删除/替换DOM元素的几种方式
2014/05/20 Javascript
js超时调用setTimeout和间歇调用setInterval实例分析
2015/01/28 Javascript
PHP结合jQuery实现红蓝投票功能特效
2015/07/22 Javascript
JavaScript Split()方法
2015/12/18 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
详解Bootstrap插件
2016/04/25 Javascript
Nodejs从有门道无门菜鸟起飞必看教程
2016/07/20 NodeJs
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
使用layer弹窗,制作编辑User信息页面的方法
2019/09/27 Javascript
js实现开关灯效果
2020/03/30 Javascript
基于aotu.js实现微信自动添加通讯录中的联系人功能
2020/05/28 Javascript
Vue中 axios delete请求参数操作
2020/08/25 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
pip安装Python库时遇到的问题及解决方法
2017/11/23 Python
Django model序列化为json的方法示例
2018/10/16 Python
Python实现八皇后问题示例代码
2018/12/09 Python
Python 通过调用接口获取公交信息的实例
2018/12/17 Python
对Python Class之间函数的调用关系详解
2019/01/23 Python
python实现logistic分类算法代码
2020/02/28 Python
html5 Canvas画图教程(10)—把面拆成线条模拟出圆角矩形
2013/01/09 HTML / CSS
萨克斯第五大道精品百货店: Saks Fifth Avenue
2017/04/28 全球购物
行政人员工作职责
2013/12/05 职场文书
请假条的格式
2014/04/11 职场文书
MySQL锁机制
2021/04/05 MySQL