tomcat 单点登录 SSO 原理分析

来源:互联网 发布:数据脱敏是什么意思 编辑:程序博客网 时间:2024/05/17 07:27

tomcat的单点登录功能应用场景:在多个应用之间共享用户角色,只需要在一个应用上登录后就可以免去在其它应用上登录认证,

关于应用的安全配置和角色要求,请看:tomcat 安全认证 Realm 及 多种类型 Realm 配置

http://blog.csdn.net/conquer0715/article/details/78206874


tomcat的单点登录功能仅限在同一个虚拟主机(Host)下使用,配置方式也非常简单,只需要在对应的虚拟主机(Host)上配置一个 单点登录的阀门即可,

找到 tomcat  server.xml 在 <Host> 节点下添加以下内容即可配置该虚拟主机的单点登录功能:

<Valve className="org.apache.catalina.authenticator.SingleSignOn"/>

好了,这样就可以了,假设我们有两个应用,都需要 admin 角色,在其中一个应用用户登录并认证成功后,访问另一个页面的admin角色受限资源可直接成功,而无需要再登录认证。


原理分析:

org.apache.catalina.authenticator.SingleSignOn 是 tomcat 的 Host 级别的阀门,即在进入所有的应用之前先要经过的阀门,其内部逻辑是这样的,从请求中获取名字为

JSESSIONIDSSO的Cookie值,然后查找本Host的应用是否已经对该JSESSIONIDSSO授权过,如果有就将用户凭证信息存入当前Request对象,这样在后续Request对象经过应用级别(Context)阀门的时候去验证用户凭证就会直接验证通过。

问题:Cookie不能跨越同源策略,那么 JSESSIONIDSSO 是如果从一个应用中创建而又能带如另外一个应用呢,我们通过浏览器的调试工具查看该Cookie就清楚了,

它和 JSESSIONID 唯一的不同就是其 Path,它的Path 是 “/”JSESSIONID的Path是应用访问名称,如“/web”,对Cookie了解的都清楚,当Cookie的Path为 / 的时候,就可以带入到同一个Host下的所有应用了。


原创粉丝点击