zoukankan      html  css  js  c++  java
  • cookie单点登录

    新近一家公司上来就让做oa,要求嵌入公司现有系统模块,自然而然想到模拟post单点登录对方系统新建单点登陆页面保存session,然现有系统都有用cookie保存用户信息,故保存本地cookie……测试失败。网上查询得知,生成的cookie所在的domainName不同所致,也就是存在cookie跨域访问问题。

    因为现有相同都是ip+端口访问方式,故无法使用二级域名共享cookie,现想到方法就是利用iframe来实现SSO,解决方法如下:

    主系统通过js创建隐藏iframe(src路径即为子系统所建ashx页面)

     //创建隐藏iframe调用单点登录页面实现cookie跨域共享
     var sso_frm = document.createElement("iframe");
     sso_frm.style.display = "none";
     sso_frm.src = "@ViewBag.SSO_Url?uid=@ViewBag.uid&pwd=@ViewBag.pwd";
     document.body.appendChild(sso_frm);
    

    子系统新建一个ashx页面,接收参数并写入cookie (代码略),这个方法取了个巧,相当于变相的登录了其他系统,唯一不足之处就是在主平台登录时需要遍历所有权限内子系统创建iframe并登录,这个方法可以很好地处理不同主域下的单点登录。

    扩展

    1)对于相同主域下的二级域名我们可以利用二级域名共享cookie实现单点登录如:站点A登录后创建cookie,设置主域:cookie.Domain = "sso.com",此时B登录可直接获取A创建的cookie。

    2)对于不同主域下的单点登录除了利用iframe还可以借助统一认证站点(passport.com)来实现单点登录

    例如”

    站点A   www.a.com

    站点B   www.b.com

    认证站点C   www.passport.com

    票据:ticket加密的账号密码以cookie形式存在。

    认证过程:假设用户user1未曾登录过站点AB,  A登录后判断 a_ticket(user1加密账号密码)是否存在,否则跳转站点C验证页面,登录成功后生成c_ticket(加密账号密码)并返回A站a_ticket;而后B站点登录会重定向站点C 验证c_ticket验证成功返回b_ticket并重定向B。

    3) 我们也可以利用redis来替换认证站点C 处理逻辑与上述过程类似:

    1.user1访问站点A,如果a_ticket存在则正常登录,否则判断缓存中是否存在以user1账号为key的值(user1账号密码加密),如果存在即返回该值并写入a_ticket,如果不存在即跳转站点A登录页登录后创建user1的redis缓存并创建a_ticket;

    2.user1访问站点B,如果b_ticket存在则正常登录,否则判断缓存中是否存在以user1账号为key的值(user1账号密码加密),如果存在即返回该值并写入b_ticket,如果不存在则挑战站点B登录页面登录后创建

    user1的redis缓存并创建b_ticket;

    总结:写的有点碎,但是大体意思应该表达清楚了,实现起来也比较简单就不再赘述。

    学无先后,达者为师
  • 相关阅读:
    SORT ORDER BY STOPKEY
    javaScript 数值型和字符串型之间的转换
    Caused by: org.apache.ibatis.type.TypeException: Could not resolve type alias 'Student'
    Caused by: java.sql.SQLException: Field 'stu_id' doesn't have a default value
    Result Maps collection does not contain value for StudentMapper.StudentMap
    集群维护
    logstash 调用exec
    logstash zabbix插件
    logstash 调用脚本告警
    Caused by: java.lang.NoSuchMethodException: com.you.entity.sys.Param.()
  • 原文地址:https://www.cnblogs.com/seanchang/p/5681915.html
Copyright © 2011-2022 走看看