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 验证图片生成函数
May 21 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
Apr 20 PHP
Look And Say 序列php实现代码
May 22 PHP
php中filter函数验证、过滤用户输入的数据
Jan 13 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
laravel 5 实现模板主题功能(续)
Mar 02 PHP
ThinkPHP中html:list标签用法分析
Jan 09 PHP
基于laravel制作APP接口(API)
Mar 15 PHP
PHP用户管理中常用接口调用实例及解析(含源码)
Mar 09 PHP
PHP多种序列化/反序列化的方法详解
Jun 23 PHP
php检查函数必传参数是否存在的实例详解
Aug 28 PHP
解决在Laravel 中处理OPTIONS请求的问题
Oct 11 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数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
php使用ob_flush不能每隔一秒输出原理分析
2015/06/02 PHP
限制文本框输入N个字符的js代码
2010/05/13 Javascript
idTabs基于JQuery的根据URL参数选择Tab插件
2012/04/11 Javascript
关于jquery的多个选择器的使用示例
2013/10/18 Javascript
JavaScript限定图片显示大小的方法
2015/03/11 Javascript
JS 拼凑字符串的简单实例
2016/09/02 Javascript
在页面中引入js的两种方法(推荐)
2017/08/29 Javascript
微信小程序点击顶部导航栏切换样式代码实例
2019/11/12 Javascript
bootstrapValidator表单校验、更改状态、新增、移除校验字段的实例代码
2020/05/19 Javascript
Python中asyncore的用法实例
2014/09/29 Python
Python编程中对文件和存储器的读写示例
2016/01/25 Python
Python手机号码归属地查询代码
2016/05/04 Python
详解分布式任务队列Celery使用说明
2018/11/29 Python
python实现五子棋小程序
2019/06/18 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Python -m参数原理及使用方法解析
2020/08/21 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
施华洛世奇匈牙利官网:SWAROVSKI匈牙利
2019/07/06 全球购物
sort命令的作用和用法
2013/08/25 面试题
人事主管岗位职责范本
2013/12/04 职场文书
车间组长岗位职责
2013/12/20 职场文书
咖啡店的创业计划书,让你hold不住
2014/01/03 职场文书
新任教师自我鉴定
2014/02/24 职场文书
创先争优承诺书范文
2014/03/31 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
三峡人家导游词
2015/01/31 职场文书
五四青年节活动总结
2015/02/10 职场文书
安徽导游词
2015/02/12 职场文书
综合办公室岗位职责
2015/04/11 职场文书
公司董事任命书
2015/09/21 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
MySql子查询IN的执行和优化的实现
2021/08/02 MySQL