谈谈自己对于Auth2.0的见解
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);
结果:
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAekAAAA/CAIAAABLvKdGAAAI0UlEQVR4nO2ZwXLbOAyG/f5PsId2JufuOX0Hy76l3ZntLRWpyR7a2X2C7MGyTJHAT5CULCvzf+MmFAWAACT+UtyD94P3/u3tn69fn5+enj59+vxHLZ8/fXp6enp+fn57e/ODnzEM3vshmh2CqWH8d7H0N8vhYjP+uHmGLtFakf0wDNf1g3yGaTT3H4bh9+/fP/7+cTqduq47dsdjd+yOx2N3HJkG4+Hl5Hy2C6Ym566b+3fHW/h59C4czMLO7buuu64f5NNNo9h/inFkaSyNpe26tIN3zjvvvXv9+fPbt+8vLy/n03nidDqdzufpc778PJ3Pp/HU9dzpdD69vLx8//7X6+vrVQad9955565D5733blzQj+uOps65ycu54MwU7HZ8C+Cu44u9u4Zx3js3leYmbxfGc+5ieJ0eF3V+GIZfv3799+9/hBDymBzcRe+c/BsMponb2E8/fXp28vMzex/bjfIbznohigN46YClxf4sbUybpd1mWZoQSPB4gNIOvev73vWud865vneu73vnLofjr/F4Go+n+v5if/WYfMe58eToPFoGEftpSRcuOHr1s8Wuntclp4z6W2rXIgJ3lsbSWBpL+5ilHfrLCmPcEBdNzocz65nZNYXb7Lj+PNKY/NTG+RouNIw8r8dRwi60dOFvlsbSWBpL+2ClHb58+ZMffvjhh599fQ7vhBBC9ga1mxBC9ge1mxBC9ge1mxBC9ge1mxBC9ge1mxBC9ge1mxBC9ge1mxBC9ge1mxBC9ge1m5DH5XDI71CLzf0Js3qcDCv6WepSVGxLZx6lp4R8VA45LO7YoCINLTF7XTh+tuTGhjS6YwNwaIlp7GRLt98fX7u18hrLJuRuYC1o3+SpaohaBgZFyRg52F5FRTMsx6v2s6In2QxF+4qnThzHkspWbCvcdX2wPNUfob3VdwwppVRrwN6OtFg8pcUXB43yATi0aTfwXamfqaXmLuZjXAJ0o7T5D/1Wu1SRiyeAXbJem7fXeDORRajQGns0HDAdF8liKUa9jlxEubQnuWA/cbu05Yo11ybx+ThadLx2hVcpmwv3emttrpXU7nuC38gatRu/1t1Zu8VVtEmQbTbJlfrZqN1GOV5K2bbUbq22ZVdp4QNrN94ej4BxJzw+QFvTQ3EGu4OriZVxpQ6DinCxoplFPY2rZ7ONxlnl1fQdI7a9ovlIH8XbQlxJnJ/GoAtaupb5ML6Yg3Fea01kKSav9UGLFqUhlpNFXEXrf1q+ViaoC1dnzEfMKjufbYK9n1vlX3SYhkpJjd+Ti5gGT8epYzvhtbCUAOa13NbrpzivxRcH+GJpGeJ5DaQyWlD72qAFmbRsKiMOSudxGqJx6d2TzdyYT2kcS8nGuorG2XyM8xoVcTbMv/Ruse+U8MZOC8l2o2JHWPLBS2suOEMQbfF+2sel8Sd7jbI4WnT7IZiv0CZ7/PtoNz4Um27vQ6Nm2eMXrZjWZb/iaYSWOBrVfbDHWTB/sFfFHWvvRnRj4/lwUtwR4GawJyO6gAjhKTErLaX1+imOQVZR4TiZBdm9drf/tGcCLi3OXzMo7U9RZ/DAkqplFxXNv8MHXjSPd4I2KaaxSf7ZrLS1SreJaA/Cio6gFcZ8wjhp5Gyrs1dTm1+qn2LaYp6al33p7J1p4eG0uzR4+097MlrHS+8eY5xsPvb4xnvlDtq3oHtq/5j5r6c1wN4S1iKUdZmIkbU8J8k2Kv4m2m2Jb++55SGRz9aS3yLaLZ6teFJZ4leMwY2FfbOH0SSIKdpocaKY2lrAMl0FHBaNS59Vjc8wS3Vb5Z+9w6u3bnaJUlHLbgF7GsYr0ngdLVUU9fMwR7PRZixqll4avElRtqAA8TCc1HzTUMbbwt6vdL5xrGWonT0kpJOiSxQwdQf5pC5iPjgyrlqsC6xrzwf0B/cNdACsmxa4Sf7icvZDC2kmYmlaJrhFxiuipQSujuZV2p8F+xkVns0tsjxIRJbGOKZsLUbVlF51fFEJ2ReWLQr0omgVTROBIogujXstLArnU3QKGCzYT2yfVaeiZmaFPp9tkXVZ6KqECPkYWF5E2oXb7ri4TOOFWt7Wi84u3s+98MHLI4SQDwm1mxBC9sda2m35g+Ux/6h5zD+7KvpZ/b80RoPqP40JIe1kvmDCZELnbOzf00WLtn/ND+JnS25sSKM7NgCH2eClBtNMS/MJIXXUa4Flx9q1BmgZGBQlYyTKqsgMy/Gq/WzpyfRMwjbZ60IIuRtLarfxvVI7pcUXB1glW2jUbuC7Uj9TS819qXqL4hNC1mBh7bZHwwHTcZEslmLUr8hFlEt7kgv2E7cLRNMUOZs5xZqQbVny++4i7U4jbKjd4iraJMg2m+RK/azQbiy+6TMpTZLaTciGbPbejbUAK6NF+CoAFeFi7dptPxRnsgm866IcdS8ci82MitLSW/YSEEKMbPB9d2j8XiiCocuyYpEqES4BzGu5rddPcT4b3372PbkK4jUlhNyN+713p5aadoOFIgNNp0qp0Ls0KzFDEG3xftrH2dyiU/hBVZotIaSd+33fnVpqEURRE+UeC6UxnzBai3ZnHyRr91Mcg8dSezLZkgkhK7HBezfe8CCs6IiF0pJPGAcoMsgqWivrYjkEcXBkLSyOll1rqT4TQhZhm+9MgL0lrEUo6zIRI2t5TrJlVPxNtBvP4+eixZ3CTcgmmL4TEGey0pNfu+Q7k9Kl7bKS1ev0tdrybpt9GV+wn4c5mg2YN2o37hV1nJC78SjaLeqj9g4r6khWYYtSSqvLymLja3WjduM4IFpogM3C5pSuQghZlvq/r/FLpWntaxzLctGprBRWJ6OFyspfNrg22d5PbK89hyzYU6p7WBJC6igQKW0nV+9Yo+PiMo0XanlbLzq7eD83Z7+ZE7I7uNkIIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR/ULsJIWR//A+q4V861tMIqQAAAABJRU5ErkJggg==" alt="" />
谈谈自己对于Auth2.0的见解的更多相关文章
- 谈谈基于OAuth 2.0的第三方认证 [下篇]
从安全的角度来讲,<中篇>介绍的Implicit类型的Authorization Grant存在这样的两个问题:其一,授权服务器没有对客户端应用进行认证,因为获取Access Token的 ...
- 谈谈基于OAuth 2.0的第三方认证 [中篇]
虽然我们在<上篇>分别讨论了4种预定义的Authorization Grant类型以及它们各自的适用场景的获取Access Token的方式,我想很多之前没有接触过OAuth 2.0的读者 ...
- 谈谈基于OAuth 2.0的第三方认证 [上篇]
对于目前大部分Web应用来说,用户认证基本上都由应用自身来完成.具体来说,Web应用利用自身存储的用户凭证(基本上是用户名/密码)与用户提供的凭证进行比较进而确认其真实身份.但是这种由Web应用全权负 ...
- .NET Core中JWT+Auth2.0实现SSO,附完整源码(.NET6)
一.简介 单点登录(SingleSignOn,SSO) 指的是在多个应用系统中,只需登录一次,就可以访问其他相互信任的应用系统. JWT Json Web Token,这里不详细描述,简单说是一种认证 ...
- 谈谈localhost与127.0.0.1
localhost意为本地主机,指这台计算机,是给回路网络接口的标准主机名,对应的IP地址为127.0.0.1,可访问本地服务器的web项目(http://localhost). 那么它们有什么区别呢 ...
- 从密码到token, 一个授权的故事 auth2.0
1 美好的旧时光 我经常怀念三十年前那美好的旧时光, 工作很轻松, 生活很悠闲. 上班的时候偶尔有些HTTP的请求发到我这里, 我简单的看一下, 取出相对应的html文档,图片,发回去就可以了, 然后 ...
- Auth2.0 例子【转载】
本文转载自:https://www.cnblogs.com/flashsun/p/7424071.html 1.引言 本篇文章是介绍OAuth2.0中最经典最常用的一种授权模式:授权码模式 非常简单的 ...
- 微信Auth2.0授权的时候出现两次回调
在获取用户OpenID的时候 $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WX_APPID. ...
- 1.2 auth2.0
多个应用 入sina qq msn 豆瓣 等 在手机登录时或终端登录时如果统一可以根据硬件做 gettid()-为了保证唯一性:方案一: 事先生成唯一验证码:使用一个isue 设置为1 ...
随机推荐
- Service Lane
Link https://www.hackerrank.com/challenges/service-lane def main(): n, t = map(int, raw_input().spli ...
- 实现android apk反编译后代码混淆
通常情况下我们需要对我们开发的android代码进行混淆,以免代码在反编译时暴露敏感信息及相关技术代码: 反编译测试工具:onekey-decompile-apk-1.0.1. 在高级版本的adt创建 ...
- HttpStatusCode 枚举
.NET Framework 类库 HttpStatusCode 枚举 包含为 HTTP 定义的状态代码的值. 命名空间:System.Net程序集:System(在 system.dll 中) ...
- 快速排序(Quick Sort)
快速排序是初学者比较难理解的几个算法之一,这里尽可简单化地讲解,希望能帮到大家. 快速排序基本步骤: 从数列中挑出一个元素,称为"基准"(pivot). 重新排序数列,所有元素比基 ...
- SSH2.0编程 ssh协议过程实现
之前为了自己做一套SSH,先自己实现了一套telnet.但经过这么多天的苦逼,发现以前的工作都是徒劳.ssh的协议很繁杂,核心的内容在于密码算法,而且自己很难在网上找到周全的细节讲解与详细的实现,只有 ...
- 用特殊字体来实现矢量ICON
用特殊字体来实现矢量ICON tips:其实每个icon都是一个unicode字符,所以,可以通过改变font-size实现icon的矢量放大:可以通过改变color实现多色系.
- PHP设计模式笔记二:面向对象 -- Rango韩老师 http://www.imooc.com/learn/236
SPL标准库的使用 SPL是用于解决典型问题(standard problems)的一组接口与类的集合. 1.SPL提供了很多数据结构类,如SplStack.SqlQueue.SqlHeap.SplF ...
- 关于NetBeans IDE的配置优化
首先,IDE的版本最好对应着JDK的版本. NetBeans优化的目的是提高NetBeans的启动速度和运行速度.下面介绍的NetBeans优化技巧是在版本6.0beta2上的优化.经过实验,大大提高 ...
- hdu4506小明系列故事——师兄帮帮忙 (用二进制,大数高速取余)
Problem Description 小明自从告别了ACM/ICPC之后,就開始潜心研究数学问题了,一则能够为接下来的考研做准备,再者能够借此机会帮助一些同学,尤其是美丽的师妹.这不,班里唯一的女生 ...
- UIView属性clipsTobounds的应用
view添加view,并剪边(UIView属性clipsTobounds的应用) 如题,有两个view: view1,view2 view1添加view2到其中,如果view2大于view1,或者vi ...