前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >跨域单点登录解决方案

跨域单点登录解决方案

作者头像
一个会写诗的程序员
发布2020-10-19 12:20:43
2K0
发布2020-10-19 12:20:43
举报

单点登录有两种模型,一种是共同父域下的单点登录(例如域名都是 xx.a.com),还有就是完全跨域下的单点登录(例如域名是xx.a.com,xx.b.com),本文我们讲一下完全跨域下的单点登录该怎么实现。

基于安全考虑,想通过cookie来实现这个功能是不太可能的了(也许有其他黑科技可以实现,这里不做讨论)。这里介绍的方案是参考shiro框架的跨域session共享方案来实现的。我们知道浏览器访问系统的时候会生成一个session,那么每次请求如何知道是来自同一个浏览器呢?是因为浏览器为每个域存储了一个可以称作为session的cookie的东西,每次请求该域都会把对应的这个cookie带上,然后服务器根据这个cookie值去查找对应的session。

想要达到完全跨域的单点登录要满足两个条件:

首先要让session可以被所有系统都访问到。 其次要让同一个浏览器下的想要实现跨域的所有系统都使用同一个session。

第一个条件通过使用spring-session框架把session存储在redis中,可以很容易实现。

那么第二个条件如何实现呢?答案就是想方法为每个域设置相同的session的cookie

举个例子,比如有a、b两个站点域名分别是www.a.com,www.b.com,这两个域名需要共享session,并且已b域名下的session为主,a登录时跳转到b域进行登录,成功登录之后重定向到a时把sessionid带上,a站点拿到sessionid之后回写到浏览器覆盖原来生成的session的cookie。这时再次访问a站点用的就是同一个session了。大概画一个图如下:

上述方案可以实现完全跨域下的单点登录,但是存在一个很大的问题,就是安全问题!

假如在第④步操作重定向回a站点时,请求链接被不法分子拦截到了,他拿着这个链接就可以直接访问a站点了。

安全问题解决方案如下图:

其实⑥、⑦两步主要要解决的问题是,向b(认证服务器)证明:“我请求认证我是合法请求,我不是非法请求”。认证成功后,返回sessionId。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档