单点登陆解决思路

有个问题 我之前一直弄不清楚 那就是 在登陆第一个系统以后 如何登陆第二个系统web

我觉得是经过超连接进去的 可是看了那么多的资料 又以为 应该是在地址栏直接输地址进去的spring

但是这样新的问题就来了 登陆第二个系统的时候 如何知道第一个系统已经登陆了 靠什么传输一个标志apache

这个问题 我到目前为止想到 两种解决方案浏览器

1. 使用response的sendredirect的方法tomcat

使用这个方法 服务器端接收的方式必定是get 并且这个方法 不能带太多的参数服务器

这个方法的妙处就在于 使用这个方法后 是浏览器本身从新再次发送了一次请求cookie

这不是重点 重点是:session

若是以前有发过请求,那么再次发送的时候 浏览器会本身把cookie带上 对的这种实现单点登陆的核心就是这个方法 间接 的利用浏览器 保存会话的标志从而实现单点登陆ssh

可是这样的作的问题就是token

若是浏览器你的数据被你清除过,那么 这种方法 就不奏效了 不过鉴于这种状况应该不会发生 浏览器清除数据 通常都是退出后 没有人会在使用的时候删掉的。

-******

这里我还想补充一点 :网上还有一种解决思路 就是域名保持一致 可是这样会由于语言不一样 web服务器不一样形成差别 好比说tomcat是jsessionid 其余的是什么的

看到这个问题 我以为的有点搞笑 感受写博客的人 可能没有搞过这个 只是随便的复制黏贴别人的东西 这里cookie的name和value都是能够在后台指定的,不必定非要使用默认的啊

******我就是皮一下 或许还有其余的问题 我也是最近开始搞这一块的东西

 

 

2. 不使用跳起色制 直接访问服务,只是把请求的路径做为参数发送给sso服务器,仍是返回一个token

可是浏览器这样会话的标志如何解决?

我想了一个解决的方案:

多系统之间有一个信任区 在这个区里面 只要登陆了一个 那么另外几个也是 能够访问的 这个时候 客户端先是本地判断用户未登陆,而后将实际的访问路径做为参数发送到 sso服务器 服务器根据请求路径 和请求信息的ip什么的(主要是用这些信息定位是哪台机器 用什么浏览器发出的,若是在再粗略一点 直接定位是哪一个ip发出的),以后根据请请求路径肯定 要访问的是哪一个信任区 在这个信任区下是否 发出该请求的用户有登录过 若是有那就直接放行 若是没有 那就让他登陆

下面举个例子说明这种解决方案

咱们这里有 系统1 系统2 系统3 这三个系统互相信任 还有另一个 sso服务器

 

如今有一个用户的ip是 153.152.85.20

假设他 经过浏览器

登陆了系统1 正常的登陆流程 且登陆成功

如今要访问系统2

系统2拦截请求 发现没有登陆 将访问路径做为参数 去sso服务器去作验证

sso根据请求判断该用户的ip是什么 以及该请求所在的信任区 去信任区下寻找 是否该ip下的用户(这里不必定要用ip 主要是能够标识这个请求来自哪里就能够了)是否已经登录过了 找到就返回对应的信息 这里发现他登录过系统1 因此直接放行

 

这里是一种解决方案 还有更加细致的权限管理 临时会话什么的

 

总结下:

单点登陆最大的问题 在于第二个或者说后面的系统如何知道这台机器下 (这个浏览器下) 这个用户已经登陆 不用再登录了,处理了这个问题 后面的权限管理 临时会话什么的就好解决了

目前解决单点登陆的产品

spring-session

cas apache一个开源产品 很细致 不过也很复杂 分为客户端和服务端 要使用ssh密码什么的 比较复杂 我以前弄过 不过成了通常

 

对于问题的话仍是要先搞清楚怎么作 怎么解决才是最好的

相关文章
相关标签/搜索