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 相关文章推荐
Discuz! Passport 通行证整合
Mar 27 PHP
php单例模式实现(对象只被创建一次)
Dec 05 PHP
PHP中基于ts与nts版本- vc6和vc9编译版本的区别详解
Apr 26 PHP
php jquery 多文件上传简单实例
Dec 23 PHP
PHP CURL获取返回值的方法
May 04 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
May 08 PHP
PHP大批量插入数据库的3种方法和速度对比
Jul 08 PHP
ThinkPHP惯例配置文件详解
Jul 14 PHP
php购物车实现方法
Jan 03 PHP
Smarty日期时间操作方法示例
Nov 15 PHP
PHP面向对象程序设计OOP继承用法入门示例
Dec 27 PHP
php正则修正符用法实例详解
Dec 29 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
dedecms防止FCK乱格式化你的代码的修改方法
2007/03/17 PHP
php 表单验证实现代码
2009/03/10 PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
2010/09/01 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
实例讲解PHP面向对象之多态
2014/08/20 PHP
支付宝服务窗API接口开发php版本
2016/07/20 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
两个select多选模式的选项相互移动(示例代码)
2014/01/11 Javascript
jquery操作cookie插件分享
2014/01/14 Javascript
跟我学习javascript解决异步编程异常方案
2015/11/23 Javascript
javascript作用域、作用域链(菜鸟必看)
2016/06/16 Javascript
JavaScript错误处理和堆栈追踪详解
2017/04/18 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
[03:23:49]2016.12.17日完美“圣”典全回顾
2016/12/19 DOTA
[40:04]Secret vs Infamous 2019国际邀请赛淘汰赛 败者组 BO3 第二场 8.23
2019/09/05 DOTA
Python的高级Git库 Gittle
2014/09/22 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
Django项目中model的数据处理以及页面交互方法
2018/05/30 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
Django模板Templates使用方法详解
2019/07/19 Python
python实现简易淘宝购物
2019/11/22 Python
matlab中imadjust函数的作用及应用举例
2020/02/27 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
Python制作简单的剪刀石头布游戏
2020/12/10 Python
Python对excel的基本操作方法
2021/02/18 Python
python元组拆包实现方法
2021/02/28 Python
利用CSS3的线性渐变linear-gradient制作边框的示例
2016/06/02 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
美国农场鲜花速递:The Bouqs
2018/07/13 全球购物
IFCHIC台湾:欧美国际设计师品牌
2019/05/18 全球购物
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
日本语毕业生自荐信
2014/02/01 职场文书
小学国庆节活动方案策划书
2014/09/16 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
先进党组织事迹材料
2014/12/26 职场文书
Win11软件图标固定到任务栏
2022/04/19 数码科技