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

  • 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. Ajax上传文件注意事项

    如图: 因为传进来的参数被预先处理了,所以才出现了illegal invocation报错,只要将processData的值改为false就能解决这个小问题: 因为JQ自动的帮我们设置了请求头,但是a ...

  2. Codeforces 917B MADMAX (DP+博弈)

    <题目链接> 题目大意:给定一个DAG图,其中图的边权是给定的字符所对应的ascii码,现在A先手,B后手,每次沿DAG图走一步,但是第i次走的边权一定要大于等于第i-1次走的边权(这里是 ...

  3. 「BZOJ 3242」「NOI 2013」快餐店「基环树」

    题意 基环树上找到一个点(可以在边上)使得它到树上最远点的距离最小,输出最小距离 题解 如果是一棵树,答案就是树的直径\(/2\) 如果是基环树,那么很好证明删去环上的某一条边是不影响答案的.于是断环 ...

  4. 三大文本处理工具grep、sed及awk

    一.   用grep在文件中搜索文本 grep能够接受正则表达式,生成各种格式的输出.除此之外,它还有大量有趣的选项. 1.  搜索包含特定模式的文本行: 2.  从stdin中读取: 3.  单个g ...

  5. Julia体验 语言特性 元编程,宏

    上接语言基础,就release-1.1来看,个人感觉这门语言和自己心中的理想国相距较远.这门语言因为受众不仅仅是程序员有很多让人迷惑的设计,但是奇怪的是它的语法等表象设计虽然暗示这不是专门为程序员准备 ...

  6. C++基础学习6:内联函数

    C++语言新增关键字 inline,用于将一个函数声明为内联函数.在程序编译时,编译器会将内联函数调用处用函数体替换,这一点类似于C语言中的宏扩展. 采用内联函数可以有效避免函数调用的开销,程序执行效 ...

  7. Unity组件

    在学习C++的时候,对于面对对象有点了解.然后也使用过一段时间的Unity,用起来还是觉得,怎么这么好用.耦合性极低.当时不知道这是基于组件编程.所以现在来学习下基于组件的知识,并比较下基于组件和基于 ...

  8. CF 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和(数位DP)

    题意: 给你三个数字L, R, K,问在[L, R]范围内有多少个数字满足它每一位不同数字不超过k个,求出它们的和 分析:考虑用状态压缩 , 10给位0~9 , 如果之前出现过了某个数字x ,那就拿当 ...

  9. HDU计算机学院大学生程序设计竞赛(2015’12)The Country List

    Problem Description As the 2010 World Expo hosted by Shanghai is coming, CC is very honorable to be ...

  10. A. The number of positions

    A. The number of positions time limit per test 0.5 second memory limit per test 256 megabytes input ...