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 相关文章推荐
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
在php和MySql中计算时间差的方法
Apr 22 PHP
批量去除PHP文件中bom的PHP代码
Mar 13 PHP
coreseek 搜索英文的问题详解
Jun 08 PHP
php实现天干地支计算器示例
Mar 14 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
Jun 29 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
PHP实现的QQ空间g_tk加密算法
Jul 09 PHP
php实现微信发红包
Dec 05 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
Laravel中使用Queue的最基本操作教程
Dec 27 PHP
PHP获取访问设备信息的方法示例
Feb 20 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图像处理函数imagecopyresampled用法详解
2016/12/02 PHP
PHP实现权限管理功能示例
2017/09/22 PHP
添加JavaScript重载函数的辅助方法2
2010/07/04 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
Javascript中的匿名函数与封装介绍
2015/03/15 Javascript
Jquery zTree 树控件异步加载操作
2016/02/25 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
servlet+jquery实现文件上传进度条示例代码
2017/01/25 Javascript
Vue实现一个返回顶部backToTop组件
2017/07/25 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
使用jquery模拟a标签的click事件无法实现跳转的解决
2018/12/04 jQuery
Makefile/cmake/node-gyp中区分判断不同平台的方法
2018/12/18 Javascript
了解前端理论:rscss和rsjs
2019/05/23 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
vue项目在webpack2实现移动端字体自适配功能
2020/06/02 Javascript
关于Vue中$refs的探索浅析
2020/11/05 Javascript
python进阶教程之模块(module)介绍
2014/08/30 Python
Python lambda和Python def区别分析
2014/11/30 Python
在树莓派2或树莓派B+上安装Python和OpenCV的教程
2015/03/30 Python
在Python web中实现验证码图片代码分享
2017/11/09 Python
Python实现PS滤镜特效之扇形变换效果示例
2018/01/26 Python
python3的输入方式及多组输入方法
2018/10/17 Python
对Python2与Python3中__bool__方法的差异详解
2018/11/01 Python
Python 面试中 8 个必考问题
2018/11/16 Python
Python语法垃圾回收机制原理解析
2020/03/25 Python
元旦促销方案
2014/03/15 职场文书
奥巴马就职演讲稿
2014/05/15 职场文书
争做文明公民倡议书
2014/08/29 职场文书
公司授权委托书格式样本
2014/10/01 职场文书
求职简历自我评价2015
2015/03/10 职场文书
学习社交礼仪心得体会
2016/01/22 职场文书
晶体管单管来复再生式收音机
2021/04/22 无线电
pytorch--之halfTensor的使用详解
2021/05/24 Python
详解Python中下划线的5种含义
2021/07/15 Python
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL