Auth的原理网上有很多,我这里就不在赘述了。

  这里有张时序图我个人觉得是比较合理而且直观的,(感谢这篇博文:http://justcoding.iteye.com/blog/1950270)

  参照这个流程,模拟了下部分代码,当然是尽可能的以简单的形式去表达下自己的见解

  模拟了配置文件去掉数据库处理的部分

config.php 定义了公司及对应的操作用户的权限

<?php
return array('app'=>array('a1'=>array('accesskey'=>'123456',//凭证'type'=>0,//聚合这里规定type对应的请求权限'appname'=>'gavinjun',),),'type'=>array(array('获取用户的信息','获取用户的金钱',),),
);

user_config.php 用户表的模拟

<?php
return array('admin'=>'123456',
);

<?php //权限2.0的主程
class Auto{private $vession=2.0;private $notic=null;public function __construct(){$notic     =     require 'config.php';$this->notic = $notic;}//校验商户public function check($_param=array()){if(empty($_param)){return false;}//获取传过来的accesskey appid$appid = !empty($_param['appid'])?$_param['appid']:0;$accesskey=!empty($_param['accesskey'])?$_param['accesskey']:'';if(!$appid||!$accesskey)return false;//校验开始$notic  = $this->notic;return $notic['app'][$appid]?$notic['app'][$appid]['accesskey']==$accesskey:false;}//用户发起登录请求public function getLoginCallBack($_param){if($this->check($_param)){//校验通过返回临时的token 以下都是不安全的方式只是模拟auto的流程//这里可以用加密 请求时间|请求完成后跳转地址|用户的md5(accesskey)return time().'|'.$_param['redirect'].'|'.md5($_param['accesskey']).'|'.$_param['appid'];}else{echo '商户未注册';return false;}}//用户输入完用户名和密码之后public function inLogin($name,$pwd){$user = require("user_config.php");return $user[$name]?$user[$name]==$pwd:false;}//用户登录完成后带着token值来请求我们的令牌public function getAceess($_param){$token = $_param['access_token'];if(!$token)return false;list($time,$redirect,$authkey,$appid) = explode('|',$token);//请求$appid 获取他的accesskey$notic  = $this->notic;$accesskey = $notic['app'][$appid]['accesskey'];if(time()>$time+5*60){//超过5分钟才请求默认失败return false;}if(md5($accesskey)!=$authkey){//链接不安全return false;}//返回正式的key//这个key可以保存在数据库中设置这个key的失效时间 //我这里随便固定了他的accesskey//给跳转的页面发送一个key 用post的应该,不过模拟就算了$access = 'success';return $redirect.'?access='.$access;}public function doSomeByaccess($access){//和数据库中做比对 这里不写了,就全部默认成功if($access){$appid = 'a1';}$notic  = $this->notic;$type   = $notic['app'][$appid]['type'];foreach($notic['type'][$type] as $v){echo '用户权限:'.$v.'<br>';}}
}

这里是模拟下这段程序的流程

<?php
//模拟流程
require 'auth2.php';
$auth2= new Auto();//step 1: 用户点击平台上的登录按钮
//该商户的信息 appid=a1,accesskey=123456
$step1=$auth2->getLoginCallBack(array('appid'=>'a1','accesskey'=>'123456','redirect'=>'http://www.baidu.com'));
//系统内部跳转到登录界面拿到临时token 让用户去登录授权
$access_token = $step1;
/**系统内部的处理流程***/
//系统跳到登录地址?access_token=$step1 用户输入用户名和密码
//模拟用户授权
if($auth2->inLogin('admin','123456')){//用户同意登录返回了一个令牌$access_token是用户登录请求的时候带上的$arr['access_token']=$access_token;$url = $auth2->getAceess($arr);//这个url会发送给平台,平台拿到这个 令牌可以去访问用户信息echo $url;
}
/****系统内部处理结束跳转到用户平台地址,发送post信息****/
//假设平台接到这个信息他保存下来了这个accesskey,去读取一遍用户的信息
$url = parse_url($url);
list($access,$accesskey)=explode('=',$url['query']);
$auth2->doSomeByaccess($accesskey);

结果:

转载于:https://www.cnblogs.com/gavinjunftd/p/5126638.html

谈谈自己对于Auth2.0的见解相关推荐

  1. 谈谈你对集成学习的见解与认识,描述一下它们的优势所在?

    [每日一问]谈谈你对集成学习的见解与认识,描述一下它们的优势所在? Datawhale优秀回答者:HipHopMan 集成方法有很多种,一种叫做bagging,bagging的思想是,我把我的数据做一 ...

  2. 谈谈基于OAuth 2.0的第三方认证 [上篇]

    对于目前大部分Web应用来说,用户认证基本上都由应用自身来完成.具体来说,Web应用利用自身存储的用户凭证(基本上是用户名/密码)与用户提供的凭证进行比较进而确认其真实身份.但是这种由Web应用全权负 ...

  3. 【49.Auth2.0认证与授权过程-微博开放平台认证授权过程-百度开放平台认证授权过程-社交登录实现(微博授权)-分布式Session问题与解决方案-SpringSession整合-Redis】

    一.知识回顾 [0.三高商城系统的专题专栏都帮你整理好了,请点击这里!] [1-系统架构演进过程] [2-微服务系统架构需求] [3-高性能.高并发.高可用的三高商城系统项目介绍] [4-Linux云 ...

  4. 统一认证中心-auth2.0

    背景 随着微服务架构的兴起,模块之间细分力度更小.许多公司将单点登录会做成一个统一的微服务平台.但是一旦抽象出一个单独的微服务平台之后,就会涉及到如下问题:(1)接入方在不同的域名,会涉及到跨域问题: ...

  5. auth2.0机制 以及jwt

    具体来说,auth2.0一共分成四种授权类型 第一种是授权码模式,这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用.授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器 ...

  6. Auth2.0拿code换token,拿token换用户信息

    先post一篇介绍Auth2.0的文章:Auth2.0, 链接失效的话,看本地PDF文件. 来源于WeChat公众号:低并发编程 之前做过oidc的权限登陆,原理基本上就是Auth2.0. auth2 ...

  7. IOS新浪微博SDK AUTH2.0认证

    新版的新浪微博SDK AUTH2.0认证一般只支持网页认证,即弹出一个WebView登录.登录后只要不注销,即使退出app,下次进入程序还是保存登录状态.这里有个问题,注销后如果不手动清除cookie ...

  8. 理解auth2.0授权码方式

    OAuth 2.0 规定了四种获得令牌的流 授权码(authorization-code) 隐藏式(implicit) 密码式(password): 客户端凭证(client credentials) ...

  9. oidc auth2.0_使用Spring Security 5.0和OIDC轻松构建身份验证

    oidc auth2.0 "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和 ...

最新文章

  1. python基础——继承与派生、组合
  2. c语言统计26个英文字母各出现个数,网上答案汇总与分析——【输入一串英文,统计各单词出现的个数】...
  3. 在本机用Toad远程连接Oracle数据库
  4. ISA Server***检测及配置
  5. java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0
  6. 面对万物互联的智能世界,你是否也想分一杯羹
  7. [vue] 说说你对SPA单页面的理解,它的优缺点分别是什么?
  8. 【JVM】javap命令行分析揭示boolean的本质的虚拟机指令
  9. 数仓集群管理:单节点故障RTO机制分析
  10. android观察者模式例子,Android-Kotlin实现观察者模式的小案例
  11. python 树状图代码_Python 无限级分类树状结构生成算法 「实用代码」
  12. bzoj 3381: [Usaco2004 Open]Cave Cows 2 洞穴里的牛之二(RMQ)
  13. ISO27001标准的起源和发展
  14. php 12306模拟登录,12306 selenium 模拟登录
  15. 写个鸭子类方法java_小黄鸭系列java基础知识 | Java基本语法
  16. 写在而立之年到来之前
  17. 文件后缀bat是什么?(批处理文件)
  18. autojs发射广播源码,使用了sendBroadcast方法
  19. 03Roberts算子
  20. 船舶强度与结构设计大作业二matlab,船舶强度与结构设计题目

热门文章

  1. 【牛客 - 125A】灰魔法师(打表,暴力)
  2. Apollo自动驾驶入门课程第⑥讲 — 预测
  3. linux bin su,linux – su:/ bin / bash:资源暂时不可用
  4. 电脑重启bootmgr_电脑系统启动:显示0xc0000428怎么办
  5. android 无线视频,Android系统无线视频流媒体的接收、解码与播放
  6. leetcode340. 至多包含 K 个不同字符的最长子串
  7. commons-lang常用方法
  8. C++:52---多重继承
  9. Linux内核 crypto文件夹 密码学知识学习
  10. STL源码剖析 算法开篇