天天看点

对单点登陆的认识

  由于项目中即将对原有的单点登陆进行改造,因此趁着周末将相关理论知识准备一下,并做一些简单的笔记,以期加深自己的理解。

1.何谓单点登陆:

  简言之,我觉得  就是 将登陆信息(或者能够代表登陆信息的凭证)保存在外部(相对于内存而言),达到用户认证与系统解耦的效果.

对单点登陆的认识
对单点登陆的认识

   由于还没有怎么使用过,因此理解起来有些偏差,不过我想理论这个方向是没错的。   比如 oauth2其中有一种登陆方式好像是基于令牌的认证方式,里面有两个概念,token,fresh_token。

   token 与fresh_token 其实就相当于系统  与 逻辑外存交互的  这样一个逻辑链路,第一,它通过非对称加密或者其它类似方式保证链路通信的安全性,这样不必时时进行与逻辑外存的交互,提高效率;  第二,通过超时机制,又能够一定程度保证用户信息的实时性,使资源可控。

2.单点登陆的实现方式:

  参考: 单点登陆的三种方式

 从我检索的资料来看,分为三种,分别是:

   1.以Cookie作为媒介凭证;    ------->它有个限制,就是不能跨域。  也就是说,操作的两个或多个系统位于同一个服务器实例下(这是浏览器安全性的要求)。  此时,逻辑外存就是 Cookie,它实际上就是一个字符串(不论它加密与否,关键它通常是对称加密,安全性不高),跟着请求跑。 

   2.通过jsonP实现;      ----->跟第一个差不多,单纯是为了解决跨域,逻辑外存仍然是Cookie;

   3通过重定向方式;   

第一种:页面重定向---->这个好像就是我之前练习的基于jwt的单点,即在原有的多个系统中,选取一个系统作为认证服务器,其它服务器都重定向到该服务器进行认证。  此时的逻辑外存是一个单独的应用实例(同时,该实例也充当业务系统的角色)。

第二种:系统重定向---->采用单独的服务器实例,专用于认证,为所有的其它业务系统提供支持。此时逻辑外存是一个严格的服务器实例。

3.jwt单点与CAS单点的区别:

  会产生这个疑问,是因为我的前老大,之前说了这样一句:”基于jwt的单点都是早几年的技术,现在基本都用cas单点“。因此我一度认为,jwt与cas是处于同一个技术维度层次。不过种种原因吧,也忙,一直没来得及专研。  这次趁机将这块知识啃啃。 

  编程久了,一直有个概念,就是"见名知义",因此要了解某个东西,去了解它的名字再合适不过。(不过servlet好像不是一个英语单词,我还特意去问了问外语系朋友。)

Json Web Token,译为 web场景下的json格式令牌,我认为较为妥帖。  很明显,一个单词概括它:令牌;这个貌似跟单点登陆没啥关系吧,嗯?? 也不知道理解对否;

Central Authentication Service,译为 中央认证服务。从名称应该可以看出来,它是跟 jdbc啊,servlet啊,jwt之类的同一个层次的东西。  趁机把j2ee十三大规范复习一波: JDBC,JNDI,EJB,RMI,JAVA IDL/CORBA,JSP,SERVLET,XML,JMS,JTA,JTS,JAVA MAIL;  J2EE十三大规范;

   如果说非要把他俩放到同一个层次比的话,我觉得可能从它们的应用角度来看,传统jwt(这里瞎猜,我之前练习那个好像是这样 hhh~~)是基于 页面重定向(见上文),而CAS是基于系统重定向(见上文)。 

    然鹅,这个题目应该是不能成立的,就像问JSP与Servlet前端页面开发方式的区别?   或者 jdbc连接数据库 与 mybatis连接数据库的区别? 

   在我所看的帖子中,有如下描述:

对单点登陆的认识

   这里描述与我理解又有了一些偏差,等将来随着接触的深入再继续更新认知吧。

   至少,jwt 确实 与 CAS 不是同一个概念层次上面。

4.参考

  除上文已给参考资料外,还包括以下资料:

    ​​cas单点登陆与jwt单点登陆区别​​

继续阅读