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 n个不重复的随机数生成代码
Jun 23 PHP
用Php编写注册后Email激活验证的实例代码
Mar 11 PHP
CURL的学习和应用(附多线程实现)
Jun 03 PHP
请离开include_once和require_once
Jul 18 PHP
ThinkPHP之M方法实例详解
Jun 20 PHP
linux下使用crontab实现定时PHP计划任务失败的原因分析
Jul 05 PHP
php生成mysql的数据字典
Jul 07 PHP
PHP单态模式简单用法示例
Nov 16 PHP
Zend Framework前端控制器用法示例
Dec 11 PHP
Laravel中日期时间处理包Carbon的简单使用
Sep 21 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
Laravel 自定命令以及生成文件的例子
Oct 23 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 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
解析php中heredoc的使用方法
2013/06/17 PHP
PHP入门教程之PHP操作MySQL的方法分析
2016/09/11 PHP
PHP入门教程之面向对象基本概念实例分析
2016/09/11 PHP
[JS]点出统计器
2020/10/11 Javascript
jQuery 核心函数以及jQuery对象
2010/03/23 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
JavaScript中Cookie操作实例
2015/01/09 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
JavaScript实现三级联动菜单效果
2017/08/16 Javascript
深入koa-bodyparser原理解析
2019/01/16 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
JavaScript监听触摸事件代码实例
2019/12/30 Javascript
vue项目配置使用flow类型检查的步骤
2020/03/18 Javascript
[02:00]DOTA2英雄COSPLAY闹市街头巡游助威2015国际邀请赛
2015/08/02 DOTA
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
2018/07/18 Python
浅谈Python接口对json串的处理方法
2018/12/19 Python
PyQt5实现QLineEdit添加clicked信号的方法
2019/06/25 Python
python 图片二值化处理(处理后为纯黑白的图片)
2019/11/01 Python
如何通过python实现人脸识别验证
2020/01/17 Python
Python正则表达式学习小例子
2020/03/03 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
基于Python爬取fofa网页端数据过程解析
2020/07/13 Python
python获取整个网页源码的方法
2020/08/03 Python
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
小天鹅官方商城:LittleSwan
2017/06/16 全球购物
GWT都有什么特性
2016/12/02 面试题
护士毕业生自我鉴定
2014/02/08 职场文书
迟到早退检讨书
2014/02/10 职场文书
教师三严三实学习心得体会
2014/10/11 职场文书
2014年工会工作总结
2014/11/12 职场文书
预备党员转正党小组意见
2015/06/01 职场文书
幼儿园教师读书笔记
2015/06/29 职场文书
导游词之湖北梁子湖
2019/11/07 职场文书