统一登录是个很多应用系统都要考虑的问题,多个项目的话最好前期进行统一设计,否则后面改造兼容很麻烦

  • cas认证的方式:新公司都是老项目,用的是cas认证的方式,比较重而且依赖较多,winform的项目也未集成进来,用户基础数据如组织机构权限等也未维护进来;其实就是cas登录后拿到usercode,然后去子系统映射相应usercode的用户的组织机构,权限信息, 缺点较多,暂不讨论;

  • token验证的方式:上家公司采用的方式,用的是基础数据平台统一登录(简称登录服务器),生成token,随url或者cookie带入服务端,服务端调用微服务去基础平台验证token有效性及获取用户信息;最近研究了下OAuth2.0 , 发现此方式是基本遵循 OAuth2.0 简化模式(Authorization Grant Implicit),还是比较好用;  流程大体如下(app1,app2是子系统):

  1. 用户登录app1,检查cookie和url有没有token信息;假设有,则通过基础平台api根据token获取用户信息;否则,转向登录url;
  2. 用户输入账号密码,登录服务器生成token返回返回原始url,回到第1步验证;
  3. 应用app1跳转到app2的时候,url带上token;app因为是内部系统,所以不做授权管理(比如qq的有应用管理),所有app共享一个token;
  4. token的保存,过期,重复登录等由登录服务器统一管理,采用内存服务器redis保证性能;redis key就是token,value是缓存用户信息,修改后需要重新登录才生效;
  5. 基础信息如组织机构,权限等,由登录服务器服务的页面维护,子系统只查询,不维护;子系统单据是否冗余组织机构名称等信息,还是只保存key,自由决定;
  6. 登录服务器所有表只逻辑删除,数据确保不会丢失;

再说说OAuth2.0, 比如qq,微信,微博等的OAuth平台,基本是基于OAuth2.0 Authorization code grant模式,先获取code,再获取auth token;

OAuth2.0 grant有四种模式,网上介绍也很多,简单说下:

  • Authorization code 授权码模式:授权后先获取授权码code,再根据code获取token,注意code是不对客户端开放的,服务端app1可以通过code任意时间refresh token;各大互联通平台基本都是通过此模式写的开放登录平台及api实现;
  • Implicit grant 简化模式: 这个是相对授权码模式的简化;简单说少了一步获取授权码code的步骤;直接返回token,RFC6749的解释是:直接暴漏给客户端token,可以由客户端JS等完成,无需通过app转接,有一定的风险性;(个人认为主要就是不能通过授权码定时刷新token,安全性低);
  • Resource Owner Password Credential 用户名密码模式: grant_type=password,直接给app保存用户名密码,当然就可以访问了,当然安全性最低,密码多出保存,泄露就一锅端;
  • Client Credential 客户端模式: grant_type=client_credential, app1和登录服务器相互信任,客户端以自己的名义,而不是以用户的名义,向"服务提供商"进行认证。严格地说,客户端模式并不属于OAuth框架所要解决的问题。在这种模式中,用户直接向客户端注册,客户端以自己的名义要求"服务提供商"提供服务,其实不存在授权问题。(没深研究,个人认为这已经超脱OAuth需要处理的范畴)

细看一下,“token验证的方式“就是OAuth2.0的Implicit grant 简化模式,只不过更精简:多个子系统app公用一个token,token不绑定app;子系统间的跳转完全依赖token的传递;权限统一在登录平台申请和管理(可以根据app管理),各个app只负责通过api获取和权限验证,更试用于企业内部系统;(比如一个权限名为“app1的登录权限”,假设api返回的权限list没有此权限,则app1直接跳转到权限不足页面即可)

OAuth2.0和企业内部统一登录,token验证方式,OAuth2.0的 Authorization code grant 和 Implicit grant区别的更多相关文章

  1. SQLSERVER误删除了Windows登录用户验证方式使用Windows身份验证的解决方法

    SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法 今天看到这篇文章:没有了SA密码,无法Windows集成身份登录,DBA怎么办? 想起来之前着急哥问我的一个问 ...

  2. 单点登录(十七)----cas4.2.x登录mongodb验证方式成功后返回更多信息更多属性到客户端

    我们在之前已经完成了cas4.2.x登录使用mongodb验证方式登录成功了.也解决了登录名中使用中文乱码的问题. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方 ...

  3. 单点登录(十五)-----实战-----cas4.2.x登录mongodb验证方式实现自定义加密

    我们在前一篇文章中实现了cas4.2.x登录使用mongodb验证方式. 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程 也学习参考了cas5.0.x版 ...

  4. 单点登录(十四)-----实战-----cas5.0.x登录mongodb验证方式常规的四种加密的思考和分析

    我们在上一篇文章中已经讲解了cas4.2.X登录启用mongodb验证方式 单点登录(十三)-----实战-----cas4.2.X登录启用mongodb验证方式完整流程 但是密码是明文存储的,也就是 ...

  5. SQLSERVER误删Windows登录用户验证方式使用Windows身份验证的解决方法

    今天看到这篇文章:没有了SA密码,无法Windows集成身份登录,DBA怎么办? 想起来之前着急哥问我的一个问题,一个DBA删除了Windows登录用户,而且SQLSERVER服务器的验证方式是Win ...

  6. Docker For MYSQL 8.0 特别注意修复数据库新的验证方式

    从Docker登录MySQL的终端 docker exec -it wordpress-mysql /bin/bash 登录数据库 mysql -u root -p 使用MYSQL数据库 use my ...

  7. [PHP] 内部接口简单加密验证方式

    1. 当有内部系统之间进行调用的时候,也需要简单的进行一下调用方的验证,一种简单的内部接口加密验证方式.此加密方式需要三个参数,分别是api地址,pin码,entry标识,其中pin和entry是接口 ...

  8. 在vue中使用后台提供 的token验证方式总结及使用方法

    token是相对会叫安全的使用暗码形式的数据传输,由后台产生,并且传输到前台,前台可以将保存,在前台每次发送请求的时候可以携带token,后台可以对token进行验证,通过验证的通过请求可以对数据进行 ...

  9. 一、传统MVC token验证方式

    一.传统MVC验证Token 推荐(https://www.cnblogs.com/xiaobai123/p/9242828.html) 自定义处理Jwt方式 1.新建JWT类 代码如下: using ...

随机推荐

  1. Vue 组件 生命周期函数mounted

    生命周期函数mounted:页面刷新触发mounted(){ console.log('我在页面刷新时触发');} Tips:使用export default function Add(){},与ex ...

  2. 小程序开发笔记【二】,抽奖结果json数据拼装bug解决

    抽奖结果数据json格式数据拼接bug,如下图,只发布了两个奖项,每个奖项设置2个奖品,但最后拼接数据的时候出现3个奖项 json数据格式如下 "luckyResult":[ { ...

  3. ASP.NET-GridView分页排序显示

    前期我们分别介绍了gridview怎么进行固定表多行数据显示,以及怎么设计花样表头.下面我们介绍怎么利用gridview进行分页显示的同时还可以进行排序显示. 显示效果 前端DEMO <span ...

  4. loj #6235. 区间素数个数 min_12.5筛

    \(\color{#0066ff}{ 题目描述 }\) 求 \(1\sim n\) 之间素数个数. \(\color{#0066ff}{输入格式}\) 一行一个数 n . \(\color{#0066 ...

  5. CF567E President and Roads

    \(\color{#0066ff}{ 题目描述 }\) 给出一个有向图,从起点走到终点(必须走最短路),问一条边是否一定会被经过,如果不经过它,可以减小它的多少边权使得经过它(边权不能减少到0) \( ...

  6. P2117 小Z的矩阵

    题意: 给你一个初始01矩阵 三种操作 1.给一个x,把第x行01互换 2.给一个x,把第x列01互换 3.求$(\sum_{i=1}^n\sum_{j=1}^nf[i][j]*f[j][i])%2$ ...

  7. POJ1113 Wall

    题目来源:http://poj.org/problem?id=1113题目大意: 如图所示,给定N个顶点构成的一个多边形和一个距离值L.建立一个围墙,把这个多边形完全包含在内,且围墙距离多边形任一点的 ...

  8. 关于dubbo服务的xml配置文件报错的问题——The matching wildcard is strict, but no declaration can be found for element 'dubbo:application'

    在配置dubbo服务的过程中,经常会遇到虽然程序能够跑起来,但是配置文件一堆红叉,虽然不影响功能,但是确实很让人恶心. 报错信息如下: 解决方案: 下载一个dubbo.xsd文件(就在dubbo.ja ...

  9. mysql 常用函数。。

    FIND_IN_SET(str,strlist) ,strlist 是 一个 由 逗号 分割的字符串,要注意 strlist 不能有逗号.. 它 等于  where str in (1,2,3***) ...

  10. Tinkphp 教程 一

    1项目生成配置php环境变量在控制台进入项目目录,执行php console build --config build.php命令在application目录创建项目目录,把创建好的目录复制到自定义a ...