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 和 MYSQL
Oct 09 PHP
php下的权限算法的实现
Apr 28 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
关于js与php互相传值的介绍
Jun 25 PHP
php自动识别文件编码并转换为UTF-8的方法
Jun 12 PHP
ThinkPHP通过AJAX返回JSON的两种实现方法
Dec 18 PHP
php提交表单发送邮件的方法
Mar 20 PHP
php版微信小店调用api示例代码
Nov 12 PHP
thinkphp整合微信支付代码分享
Nov 24 PHP
详解PHP中的 input属性(隐藏 只读 限制)
Aug 14 PHP
php微信公众号开发之关键词回复
Oct 20 PHP
php封装实现钉钉机器人报警接口的示例代码
Aug 08 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 设计模式之 工厂模式
2008/12/19 PHP
PHP mb_convert_encoding 获取字符串编码类型实现代码
2009/04/26 PHP
探讨php中防止SQL注入最好的方法是什么
2013/06/10 PHP
php上传中文文件名乱码问题处理方案
2015/02/03 PHP
CodeIgniter集成smarty的方法详解
2016/05/26 PHP
laravel自定义分页效果
2017/07/23 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
永不消失的title提示代码
2007/02/15 Javascript
javascript实现动态CSS换肤技术的脚本
2007/06/29 Javascript
Node.js(安装,启动,测试)
2014/06/09 Javascript
通过jquery 获取URL参数并进行转码
2014/08/18 Javascript
node.js中的fs.fchownSync方法使用说明
2014/12/16 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
JS实现可直接显示网页代码运行效果的HTML代码预览功能实例
2015/08/06 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
JavaScript Math 对象常用方法总结
2016/04/28 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
jQuery组件easyui对话框实现代码
2016/08/25 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
js时间戳和c#时间戳互转方法(推荐)
2017/02/15 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
微信小程序websocket实现聊天功能
2020/03/30 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
python 解决动态的定义变量名,并给其赋值的方法(大数据处理)
2018/11/10 Python
python3+PyQt5 创建多线程网络应用-TCP客户端和TCP服务器实例
2019/06/17 Python
Python多线程threading join和守护线程setDeamon原理详解
2020/03/18 Python
Keras使用ImageNet上预训练的模型方式
2020/05/23 Python
Python实现我的世界小游戏源代码
2021/03/02 Python
CSS Grid布局教程之浏览器开启CSS Grid Layout汇总
2014/12/30 HTML / CSS
CSS3 创建网页动画实现弹跳球动效果
2018/10/30 HTML / CSS
LORAC官网:美国彩妆品牌
2019/08/27 全球购物
内勤岗位职责
2015/02/10 职场文书
Spring Boot接口定义和全局异常统一处理
2022/04/20 Java/Android