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 17 PHP
php 生成WML页面方法详解
Aug 09 PHP
php addslashes及其他清除空格的方法是不安全的
Jan 25 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
PHP动态输出JavaScript代码实例
Feb 12 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
PHP preg_match实现正则表达式匹配功能【输出是否匹配及匹配值】
Jul 19 PHP
kindeditor 加入七牛云上传的实例讲解
Nov 12 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
laravel 模型查询按照whereIn排序的示例
Oct 16 PHP
Swoole源码中如何查询Websocket的连接问题详解
Aug 30 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&amp;&amp;mysql)四
2006/10/09 PHP
php5数字型字符串加解密代码
2008/04/24 PHP
使用VisualStudio开发php的图文设置方法
2010/08/21 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
2021/02/27 PHP
jQuery 对象中的类数组操作
2009/04/27 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
JavaScript中的原型和继承详解(图文)
2014/07/18 Javascript
jQuery代码实现对话框右上角菜单带关闭×
2016/05/03 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
js数组与字符串常用方法总结
2017/01/13 Javascript
通过jsonp获取json数据实现AJAX跨域请求
2017/01/22 Javascript
python实现线程池的方法
2015/06/30 Python
详解python3实现的web端json通信协议
2016/12/29 Python
Python 中 Virtualenv 和 pip 的简单用法详解
2017/08/18 Python
python3设计模式之简单工厂模式
2017/10/17 Python
python 重定向获取真实url的方法
2018/05/11 Python
python实现手机销售管理系统
2019/03/19 Python
Python Numpy计算各类距离的方法
2019/07/05 Python
python的launcher用法知识点总结
2020/08/07 Python
手把手教你用纯css3实现轮播图效果实例
2017/05/04 HTML / CSS
html2canvas把div保存图片高清图的方法示例
2018/03/05 HTML / CSS
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
Linux管理员面试经常问道的相关命令
2013/04/29 面试题
一套软件测试笔试题
2014/07/25 面试题
会计出纳员的自我评价
2014/01/15 职场文书
本科毕业生求职自荐信
2014/02/03 职场文书
和睦家庭事迹
2014/05/14 职场文书
教师党员个人整改措施
2014/10/27 职场文书
五一劳动节慰问信
2015/02/14 职场文书
项目验收申请报告
2015/05/15 职场文书
掌握一个领域知识,高效学习必备方法
2019/08/08 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS