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 实用代码收集
Jan 22 PHP
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
Jun 09 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
Nov 01 PHP
使用php shell命令合并图片的代码
Jun 23 PHP
解析二进制流接口应用实例 pack、unpack、ord 函数使用方法
Jun 18 PHP
PHP关于IE下的iframe跨域导致session丢失问题解决方法
Oct 10 PHP
ThinkPHP字符串函数及常用函数汇总
Jul 18 PHP
PHP抓取及分析网页的方法详解
Apr 26 PHP
php通过会话控制实现身份验证实例
Oct 18 PHP
PHP XML和数组互相转换详解
Oct 26 PHP
PHP基于redis计数器类定义与用法示例
Feb 08 PHP
实例讲解PHP中使用命名空间
Jan 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
destoon调用自定义模板及样式的公告栏
2014/06/21 PHP
PHP实现采集中国天气网未来7天天气
2014/10/15 PHP
PHP获取POST数据的几种方法汇总
2015/03/03 PHP
PHP基于单例模式实现的mysql类
2016/01/09 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
Symfony2创建基于域名的路由相关示例
2016/11/14 PHP
php实现批量上传数据到数据库(.csv格式)的案例
2017/06/18 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
javascript闭包的理解和实例
2010/08/12 Javascript
js通过元素class名字获取元素集合的具体实现
2014/01/06 Javascript
使用JavaScript 编写简单计算器
2014/11/24 Javascript
jQuery实现自定义checkbox和radio样式
2015/07/13 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
ES6中Symbol类型用法实例详解
2017/04/06 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
JavaScript实现设置默认日期范围为最近40天的方法分析
2017/07/12 Javascript
JavaScript实现简单轮播图效果
2018/12/01 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
解决vue watch数据的方法被调用了两次的问题
2020/11/07 Javascript
原生js实现九宫格拖拽换位
2021/01/26 Javascript
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
Python基于列表模拟堆栈和队列功能示例
2018/01/05 Python
python 实现判断ip连通性的方法总结
2018/04/22 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
HTML5中新标签和常用标签详解
2014/03/07 HTML / CSS
英超联赛的首选足球:Mitre足球
2019/05/06 全球购物
德国帽子专家:Hutshopping
2019/11/03 全球购物
奥地利手表、香水、化妆品和珠宝购物网站:Brasty.at
2021/01/17 全球购物
js实现弹框效果
2021/03/24 Javascript
汽车维修工岗位职责
2014/02/12 职场文书
铲车司机岗位职责
2014/03/15 职场文书
大型活动组织方案
2014/05/10 职场文书
机械原理课程设计心得体会
2016/01/15 职场文书
python 爬取京东指定商品评论并进行情感分析
2021/05/27 Python
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript