简单说基于JWT和appkey、sercurtyKey的SSO、身份认证方案
环境介绍,
一个大的系统由多个子系统组成。典型地,假设有一个平台,其上接入了多个应用。则有几个常见的问题需要处理,
1、SSO(包括单个应用退出时,需要处理为整个系统退出);
2、平台跳转到应用、及应用间互相跳转时的身份验证;
3、应用调用平台接口时的身份/权限认证。
方案有很多,例如基于OAuth2的单点与接口授权,基于cas的认证等。下面简单说一下基于jwt和appkey、sercurtyKey的方案。
jwt,
1. 做一个ucenter模块,方便起见,该模块合并到平台工程中(复用一个库,这样读取用户信息更方便)
2. jwt由ucenter模块生成,在载荷部分包含了用户大多数信息,因此应用拿到jwt后,可以在自己的后台中创建用户(如果没有的话)。
3.jwt与应用+用户一一对应,可以记录在缓存中,由ucenter暴露出对外的方法,做得比较薄,目的是提高调用效率。
4. 用户登录时,不管是登录平台、还是应用,都需要到ucenter中进行认证,如果发现没有此用户,则导向登录页。登录成功后,ucenter生成载荷部分包含较全用户信息的jwt返回给应用,应用自行处理。典型的处理方式是应用用ucenter返回的用户信息在自己的后台创建用户,并做一次模拟登录。
5. 每个应用在登录、或自己的浏览器端传过来一个(对应用自己后端的)请求时,都会向ucenter请求身份认证(在缓存中查),如果没有,则导向登录页。
6. 有任意一个应用退出后,都会调用平台的退出接口,则平台将缓存中的jwt清掉,该用户的其它应用在做跳转、页面请求后台业务时,都会到ucenter验证身份 —— 在缓存中找对应的jwt,如果找不到,则认为已经退出/超时,导向登录页。
7. 注意,如果应用不与ucenter/平台部署在一起,则是需要远程调用的。
platformKey与sercurtyKey,
1. 接口调用授权:接口调用授权与jwt无关,平台的接口调用授权,是靠platformKey与sercurtyKey验证进行的。每次调用时,只要带上了这两个key,平台验证通过了,就认为是合法的调用。
2. 一个可扩展的点:可以在平台后端做哪些key对应开放哪些接口的控制。
一些具体案例,
一、两个系统对接,wlw应用,yz为平台。对接用户、机构、权限角色。
方案1. yz将所需的信息写入oracle数据库,wlw读取库。
方案2.
1)wlw初始化:yz提供批量获取用户信息的接口,wlw一次性获取,加入自己的系统,创建用户。管理员可批量设置用户的角色权限。
2)用户登录:用户在yz登录,跳转到wlw时,生成包含用户信息+机构的jwt串,传给wlw。
3)wlw检测用户是否存在,若不存在则创建。
4)wlw做一次模拟登录。
5)期间用户信息发生变化时(昵称、头像等),zy调用wlw的通知接口进行通知,wlw调用yz获取用户信息的接口进行更新。
权限角色:将yz的所有角色与wlw做一个映射,从zy同步到wlw的用户,按映射表赋予缺省的角色权限。如果有不满足的,在wlw后台人工修改。
二、三个系统, yk(Y)、zx(Z)、移动。 其中移动提供最基础的用户数据,外加一点机构信息。yk为平台,zx接入
讨论后,如下接入
Y Z
\ /
用户中心(ucenter)
|
移动
1. Z与移动合作开发ucenter。ucenter从移动获取用户基础数据,并
1)补充Y与Z需要的其它字段
2)维护组织机构(区域-学校-班级)
3)与移动进行用户信息的增删改同步。
2. Y与Z都分别与用户中心对接。
3. 场景:户登录Y/Z中的一个应用,称为A,并跳转到另一个应用B。
1)应用A到uCenter中进行认证,如果发现没有此用户,则导向ucenter的登录页。
登录成功后,ucenter生成包含用户信息(载荷部分)的jwt返回给应用A,A自行处理。例如用返回的用户信息在自己的后台创建用户(若用户不存在),并做一次模拟登录。若已经登录过则不做操作。
2)跳转到另一个应用B,B到ucenter中进行认证,步骤同上。
3)跳转到任何一个应用时,若是用户首次登录该应用,且此应用需要补全用户的信息,则首次登录时,弹出对话框让用户补全信息。
4)A与B互相调用对方接口时,调用参数中都需要包含用户id,服务提供方用id到ucenter中查看该用户的状态。根据不同的状态(登录/未登录等)+ 不同的接口 组合,按业务权限给出是否禁止调用等判断。
5)移动有数据变化时,通知ucenter,ucenter通知到Y与Z,Y与Z去ucenter中拉取数据。
6)Y与Z之一(A)退出时,通知ucenteer,ucenter刷新自己的状态。后续B跳转到A时,A到ucenter中检测到状态为未登录,会导向登录页,重复步骤1)
简单说基于JWT和appkey、sercurtyKey的SSO、身份认证方案的更多相关文章
- ASP.NET Web API 2系列(四):基于JWT的token身份认证方案
1.引言 通过前边的系列教程,我们可以掌握WebAPI的初步运用,但是此时的API接口任何人都可以访问,这显然不是我们想要的,这时就需要控制对它的访问,也就是WebAPI的权限验证.验证方式非常多,本 ...
- 基于session和token的身份认证方案
一.基于session的身份认证方案 1.方案图示 2.比较通用的鉴权流程实现如下: 在整个流程中有两个拦截器. 第一个拦截器AuthInteceptor是为了每一次的请求的时候都先去session中 ...
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(二)
上文已经介绍了Identity Service的实现过程.今天我们继续,实现一个简单的Weather API和一个基于Ocelot的API网关. 回顾 <Angular SPA基于Ocelot ...
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(四)
在上一讲中,我们已经完成了一个完整的案例,在这个案例中,我们可以通过Angular单页面应用(SPA)进行登录,然后通过后端的Ocelot API网关整合IdentityServer4完成身份认证.在 ...
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(三)
在前面两篇文章中,我介绍了基于IdentityServer4的一个Identity Service的实现,并且实现了一个Weather API和基于Ocelot的API网关,然后实现了通过Ocelot ...
- 简单说说基于JWT的token认证方式
一.什么是认证 好多人不知道什么是认证,认证,其实就是服务端确认用户身份.Http协议是无状态的,客户端发送一条请求,服务端返回一条响应,二者就算做成一单买卖,一拍两散.在很久以前,互联网所能提供的服 ...
- 基于JWT的token身份认证方案
一.使用JSON Web Token的好处? 1.性能问题. JWT方式将用户状态分散到了客户端中,相比于session,可以明显减轻服务端的内存压力. Session方式存储用户id的最大弊病在于S ...
- 基于JWT的token身份认证方案(转)
https://www.cnblogs.com/xiangkejin/archive/2018/05/08/9011119.html 一.使用JSON Web Token的好处? 1.性能问题. JW ...
- Angular SPA基于Ocelot API网关与IdentityServer4的身份认证与授权(一)
好吧,这个题目我也想了很久,不知道如何用最简单的几个字来概括这篇文章,原本打算取名<Angular单页面应用基于Ocelot API网关与IdentityServer4+ASP.NET Iden ...
随机推荐
- 启动spring boot项目
启动spring boot项目 pom.xml如下: <?xml version="1.0" encoding="UTF-8"?> <proj ...
- gradle配置国内的镜像
gradle配置国内的镜像 学习了:http://blog.csdn.net/stdupanda/article/details/72724181 http://blog.csdn.net/lj402 ...
- Hibernate学习笔记(八) — 懒载入与抓取策略
懒载入(Load On Demand)是一种独特而又强大的数据获取方法,它可以在用户滚动页面的时候自己主动获取很多其它的数据,而新得到的数据不会影响原有数据的显示,同一时候最大程度上降低server端 ...
- Linux -- 内存控制之oom killer机制及代码分析
近期,线上一些内存占用比較敏感的应用.在訪问峰值的时候,偶尔会被kill掉,导致服务重新启动.发现是Linux的out-of-memory kiiler的机制触发的. http://linux-mm. ...
- 我在SharePoint行业的从业经历(二)
本文是我的SharePoint从业经历的第二篇,第一篇请參考 我在SharePoint行业的从业经历(一) 做完那个项目之后.对SharePoint 2003有了一些认识. 可是后来几年我就没在 ...
- 88. [ExtJS2.1教程-5]ToolBar(工具栏)
转自:https://llying.iteye.com/blog/324681 面板中可以有工具栏,工具栏可以位于面板顶部或底部,Ext中工具栏是由Ext.Toolbar类来表示.工具栏上可以放按钮. ...
- 3个不常用的HTML标签
html标签众多,在HTML手册里你可以都查到.但有的HTML标签你可能从未使用过.不是因为你欠缺学习精神,而是它们确实用处不大.如果你有探索精神,那就接着往下看吧. 第一个:<abbr> ...
- Python 43 视图 、sql注入问题 、事务 、存储过程
一:视图 1 视图是什么? 本质是一张虚拟的表,他的数据来自select语句 创建视图 create view test_view select *from t1; 2 有什么用? 原表安全 案例: ...
- C语言和C++的应用领域都在哪些?学C语言好,还是学习C++好?
从事嵌入式开发十几年,基本上围绕着这两种编程语言展开,都可以直接操作底层的编程语言,用的越熟练越是感觉工具属性越强.虽然两种编程语言分属于不同的编程思想,用的时间长了觉得差异也不是很大,现在就个人的从 ...
- DIV+CSS设计时浏览器兼容性
近期用Div+css做了个企业网站,在浏览器中测试的时候确发现在IE7中显示正常的页面,在ie6中非常混乱,当时第一感觉就想到了兼容问题,可是百思不得其解应该从哪下手,经过一两天的查资料, ...