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

  • 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. CentOS6.5上Zabbix3.0的RPM安装【三】-安装并添加Agent

    七.Download and install Zabbix Agent Zabbix Agent is required to install on all remote systems needs  ...

  2. AOP切点相关

    1.切点定义 切点定义包含两个部分 一个切入点表达式 一个包含名字和任意参数的方法签名 package com.sysker.aspect; import org.aspectj.lang.annot ...

  3. BS总结篇­

    学习Web开发差不多三个月了,这个阶段的学习给自己带来的更多的是视觉的盛宴.从CS的世界一下子来到了BS的地盘,心中除了惊喜还是惊喜.在这里还是希望自己对这三月所学的东西做一个阶段性的总结. 话不多说 ...

  4. 洛谷 P3586 [POI2015]LOG

    P3586 [POI2015]LOG 题目描述 维护一个长度为n的序列,一开始都是0,支持以下两种操作:1.U k a 将序列中第k个数修改为a.2.Z c s 在这个序列上,每次选出c个正数,并将它 ...

  5. 查看ip常见命令...

    1.获取ip Unix用户可以在命令提示符中输入ifconfig来获取. 使用Windows的用户,请尝试使用 ipconfig 命令.

  6. 「模拟赛20180406」膜树 prufer编码+概率

    题目描述 给定一个完全图,保证\(w_{u,v}=w_{v,u}\)且\(w_{u,u}=0\),等概率选取一个随机生成树,对于每一对\((u,v)\),求\(dis(u,v)\)的期望值对\(998 ...

  7. kuangbin专题十二 POJ3186 Treats for the Cows (区间dp)

    Treats for the Cows Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7949   Accepted: 42 ...

  8. springboot整合mybatis,redis,代码(三)

    一 说明 接着上篇讲述redis缓存配置的用法: 二 正文 首先要使用缓存就必须要开开启缓存,第二步是需要开redis-server 下载redis包之后,点击图中两个都可以开启redis 怎么看是否 ...

  9. react 的理念

    命名式的编程方式: 命名式的编程方式,我们会有百分之六七十都在进行dom的操作. 1.声名式的开发: react是面向数据开发的,react是根据这个数据自动构建这个网站,可以把数据理解成图纸,rea ...

  10. CodeForces-Zuhair and Strings(思维+枚举)

    Given a string ss of length nn and integer kk (1≤k≤n1≤k≤n). The string ss has a level xx, if xx is l ...