请问js如何设置单点登录?

JavaScript011

请问js如何设置单点登录?,第1张

你可以将原系统的账号密码做成一个配置的json文件,

然后前端去访问这个文件,账号密码一一对应就可以了。

从第三方系统单点登录到目标系统,

第三方系统会发送token进行验证,通过解析token,

获取相应的用户信息的json串,将其set到自己系统的session中。

公司的SSO采用CAS机制,机制说明: https://www.jianshu.com/p/083c0597e7e0

ant design pro接入SSO时,也踩了一些坑

一、应用服务端

服务端使用了spring boot,spring boot跟CAS的整合可以参考文档: https://blog.csdn.net/jw314947712/article/details/54236216

二、前端

这里有几个坑需要注意:

1、ajax请求返回SSO登录页面,需要修改跳转模式为手动跳转。

2、由于SSO域名与前端域名不同,ajax请求结果并不会出现302返回码。

修改utils下面的request.js文件,设置跳转模式为手动跳转

然后在response里面拦截

很多时候我们的项目是很大的,是由几个分别独立的小项目构成的,他们或许是通域名,有的或许是不同的域名。

但是往往用户群体就是一群,他们需要使用我们不同系统的很多服务,比如阿里云系统,繁多的模块基本上每个人品都有独立域名。一旦登陆的账号服务为,从此就是一票全通了,本码农此前没有任何经验,看了一些文章页也似懂非懂的,最近觉的有点想通了,所以先记下来后面要时间。

单点登陆需要一个统一的用户中心,阿里云为例。

https://account.aliyun.com/login/login.htm?oauth_callback 需要这样的 一个用户认证中心。

只要在这个认证中心登陆,就会获得一一张一卡通,随便逛阿里云的其他服务我房间,系统就显示你已经登陆。

写到一半各种任务都来了,自己的思路基本上打断了,好在请求群友的时候,群友推荐一篇深度好闻这里附上链接

https://www.cnblogs.com/ywlaker/p/6113927.html#!comments

翻评论是发现一条比较精辟评论但是没人理睬

https://www.cnblogs.com/ywlaker/p/6113927.html#!comments

但却让我眼前一亮。

当我们访问 A B C SSO这些站点时候,任何一个子站点 A B C在非本站登陆的情况下,统一跳到 SSO服务器去输入密码,登陆成功之后,跳回 A B C站中的登陆页面,没错这是一个自动登陆的页面。 该页面内联 SSO站的动态JS脚本,当然 iframe也是可以的,此时我们会获得SSO站的用户登陆信息,这份信息是非常真实的用户登陆信息,拿到这份信息,直接请求A站点的后端登陆接口设置好session,此时自动登陆完成。 这一过程中并没有文章提到的一些token,个人认为基本可以忽略了,就用默认的过期时间就好了。 那么A站登陆成功之后,B站自动登陆同样一个历程,先跳SSO,SSO等状态下,跳回B站的自动登陆页面时间自动登陆。

js iframe 有一点是可以被伪造,用户可以通过就该本机hosts 解析SSO的域名为本地,然后输出一段可以通过的脚本,此时A系统在客户端并没有成功拦截回SSO服务器,这时候,A系统拿着伪造信息去验证是通不过的,不过用户拿到另一浏览器得到的真实的用户票据(token)给SSO服务器做验证,SSO服务器拿到这个票据,验证成功之后返回给A系统附带解密出来的客户端信息,A系统得到这个客户端标志,与A系统的客户端对比,如果发现不是同一个,那么则登陆失败。

另外一种情况防止 token 被截获或者被发走记录,或者用户直接在A B C 的子应用页面直接键入链接去登陆,

此时我们子应用服务端首先要检查 reffer 如果没有那就直接跳到SSO服务区登陆。如果 reffer被伪造了,那我需要我设置验证 token的有效期,如果这个token在5秒内没有完成子应用的登陆他就失效了,同样跳回SSO服务,这一点应可以做到安全了。

同样会面对单点注销问题,ABC 任何一个站发起注销,都是去跳转SSO站统一注销页面。

当 SSO网站完成注销之后,SSO站隐藏式请求 所有子站点 注销或者注销api记住一定是由客户端来注销。可以使用内联JS方式,iframe 方式,以及图片链接方式均可。然后跳回SSO的 登陆页面。此时我们在访问同一浏览器下面 ABC 站点就均为注销状态了。

当然还有一些关于 不同的超时时间问题,个人觉得问题不大,可以把sso的session时间加上一点。

另外这里有一个问题呢就是 如何SSO服务器过期时间已经到了,其他子站点还保持这登陆 状态这到是一个问题。为了避免这个问题,我们可以在任意子站点设置个定时请求脚本,来检测这个超时状态,一点发下超时,脚本自动跳转至 SSO 退出页面,完成所有子站点的退出。

A B C 站点

欢迎大家在评论区讨论。