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

  • 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. C#:数据库通用访问类 SqlHelper

    using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; usin ...

  2. Harbor安装 -- 企业级Registry仓库

    (一)Harbor安装 -- 企业级Registry仓库 以下文章转自http://www.jianshu.com/p/2ebadd9a323d 根据Harbor官方描述: Harbor是一个用于存储 ...

  3. uoj#450. 【集训队作业2018】复读机(单位根反演)

    题面 传送门 题解 我的生成函数和单位根反演的芝士都一塌糊涂啊-- \(d=1\),答案就是\(k^n\)(因为这里\(k\)个复读机互不相同,就是说有标号) \(d=2\),我们考虑复读机的生成函数 ...

  4. Java实现微信小程序支付(支付,提现,退款)

    1.添加WXpayCommon类用以具体实现功能,代码如下: package com.karat.cn.wxCommon; import java.io.IOException; import jav ...

  5. leecode第三题(无重复字符的最长子串)

    class Solution { public: int lengthOfLongestSubstring(string s) { int len=s.size(); ||len==)//边界 ret ...

  6. webpack基础理解以及使用搭建

    1.webpack 是一个前端资源加载/打包工具,前端的常用资源都可以作为一个模板导出,我们在代码中直接引用即可,最后把我们的代码打包整合起来. 前端资源,包括(js,css,图片,模块)等. 下面是 ...

  7. ERROR (UnicodeEncodeError): 'ascii' codec can't encode character u'\uff08' in position 9: ordinal not in range(128)

    环境win10+anaconda2 在安装labelme时遇到了这个问题,其实跟labelme没啥关系,主要是python2读取中文路径时报错,因为默认编码是ASCII,不认识中文,看到有一个一次性解 ...

  8. 取消 windows2008 server 禁ping

    windows 2008 server 默认是禁ping的,取消方法如下: 依次打开: 服务器管理器——配置——高级安全windows防火墙——入站规则 找到“文件和打印机共享(回显请求-ICMPv4 ...

  9. 【转】Automated Testing Detail Test Plan

    Automated Testing Detail Test PlanAutomated Testing DTP Overview This Automated Testing Detail Test ...

  10. java消息中间件

    消息中间件介绍   消息队列 什么是消息队列 消息队列是消息中间件的一种实现方式. 什么是消息中间件? 将消息中间件需要理解一下什么是消息和中间件? 消息 消息是指软件对象之间进行交互作用和通讯利用的 ...