2-跨域SSO

作者: awesome丁 | 来源:发表于2017-09-11 21:07 被阅读200次
跨域原理图

cookie与session

cookie属于(域 + 路径),不区分用户,而session针对用用户会话。
例如,用户A登录http://www.a.com/demo1,设置cookie[a] = 123,session[b] = 456,当用户A在该浏览器上退出,用户B在该浏览器上登录http://www.a.com,此时用户B可以查看cookie[a] = 123, 而session[b]是没有数据的。因为cookie[a]属于域www.a.com(当设置路径为根路径时)

假设有两个跨域应用:
http://www.a.com
http://www.b.com
单点登录系统:
http://www.x.com

  1. 用户访问http://www.a.com, ServerA从cookie(www.a.com域下根路径)中查询token,如果不存在,执行逻辑2,否则执行逻辑3;
  2. 返回http://www.a.com的登录界面给浏览器,用户输入username+password向ServerA发起登录请求,执行逻辑5;
  3. ServerA访问ServerSSO的验证接口,ServerSSO验证token是否在记录列表中,返回验证验证结果。ServerA判断验证结果,如果token有效,执行逻辑4,否则执行逻辑2;
  4. 返回http://www.a.com的主页给浏览器(附带token),主页中通过iframe的形式,分别访问ServerA与ServerB的addCookie接口(附带token),ServerA将token设置到cookie(www.a.com域下根路径)中,浏览器与ServerB通讯,ServerB将token设置到cookie(www.b.com域下根路径)中,当访问http://www.b.com时,执行逻辑3(针对ServerB)
  5. ServerA访问ServerSSO的登录接口,ServerSSO验证username+password是否有效,若有效则生成并记录token,将token返回给ServerA,否则返回认证失败信息。ServerA判断认证结果,如果认证成功,执行逻辑4,否则执行逻辑逻辑2

iframe设置token

index.html中通过iframe的方式,分别访问http://www.a.com/addCookiehttp://www.b.com/addCookie,将token设置到服务器A和B的cookie中

对于ServerB,因为浏览器中index.html通过iframe的方式访问了ServerB,对于ServerB就添加了token的cookie

当在浏览器中键入http://www.b.com时,ServerB的cookie(www.b.com域下的)中存在token,且该token在ServerSSO中验证合法,从而可以访问到ServerB的index.jsp,不需要再去登录(不会跳转到ServerB的登录页面)。

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@page isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
demo1.jsp
${cookie.token.value}
<c:forEach var="url" items="${hiddenUrl}">
    <iframe src="${url}?token=${token}" width="0px" height="0px" style="display: none"></iframe>
</c:forEach>
</body>
</html>

架构特点

  1. ServerA与ServerB有各自的前端登录页面,但是后端认证都是请求ServerSSO
  2. ServerSSO中token只能自己管理,不能放到cookie中存储,因为ServerA与ServerB都是通过http请求访问ServerSSO,不会携带之前的cookie
  3. ServerA与ServerB中token是在cookie中管理,直接跟浏览器打交道(浏览器每次请求都会携带对应域名下的cookie)

相关文章

  • 2-跨域SSO

    cookie与session cookie属于(域 + 路径),不区分用户,而session针对用用户会话。例如,...

  • SSO实现调研

    零、耶鲁CAS SSO(支持跨域、子会话) 《SSO CAS单点系列》之 实现一个SSO认证服务器是这样的! 一....

  • 基于PHP编程语言的SSO实例

    SSO有三种模式:①跨子域单点登陆②完全跨单点域登陆③站群共享身份认证 第一种模式很简单,只需要将Cookie的域...

  • SSO单点登录(Single Sign On)

    前言 1.几个基本概念 https!!!https!!!https!!! 1.1 什么是跨域Web SSO Co...

  • CORS实现跨域SSO单点登录

    前一段时间看过CAS实现跨域单点登录SSO的方案,觉得比较复杂,想到如果有了CORS是不是可以直接使用跨域ajax...

  • SSO三种情况的实现方式

    同域下不同站点的SSO(跨站点) 两个站点如果在同域下,那么它们之间是可以共享cookie的。简单的说就是这种同域...

  • 跨站(跨域)单点登录的实现(SSO)

    本文分两部分 1.转他人的文章,详细介绍了跨站单点登录的原理和解决方案 2.我自己写代码,着重介绍里面的重点部分 ...

  • 深入跨域问题(3) - 利用 JSONP 解决跨域

    深入跨域问题(1) - 初识 CORS 跨域资源共享;深入跨域问题(2) - 利用 CORS 解决跨域深入跨域问题...

  • 关于设置env等环境变量的思考

    1、如何处理跨域后台处理跨域前端处理跨域浏览器处理跨域 前端本地处理跨域:代理线上跨域的处理方式:Nginx反向代...

  • Web前后端跨域问题处理

    跨域问题有前台跨域(iframe间)和后台跨域。 前台跨域的解决方案可以采用跨域文档通讯(Cross domain...

网友评论

    本文标题:2-跨域SSO

    本文链接:https://www.haomeiwen.com/subject/dmtqsxtx.html