• 话说passport的整合


    如果是几套全新的系统,passport可以深入嵌入到系统中,虽然做的事情需要多点,能讨论的东西却少一些。

    假设有3个域名 a.com ,b.com,c.com
    passport位于c.com.

    一、如果在a.com访问后,登陆,然后再访问b.com,如何保证这个时候b.com是登陆状态?
    passport总的意思就是要在一个点上面记录下一个key,然后用这个key到其他站点中去执行相应操作。那么通过地址栏url参数转发,或者cookie操作总有办法把passport的状态传递到b.com的。如果用url参数转发,那就是一直跳转来又跳转去,比较傻冒。跳那么一天还不累死啊!而用cookie,在firefox下部存在跨域问题,而在ie下,默认隐私策略是不允许跨域操作哪怕是读取cookie的。当然cookie问题可以用p3p解决,这样javascript + p3p就变成了很友好的解决方案。像sohu就是这么做的。

    相应的,在a.com退出,同时删除passport的状态,那么b.com也就有办法退出了。至于passport的状态只是简单得存储为cookie还是保持到比如数据库中,各有各的好处。只保存cookie,那么相应的处理简单点,而跨域操作cookie需要一个代理,所以这种情况下操作时在客户端判断状态再执行操作。而把登陆状态存储到数据库则可以在服务端进行操作,弊端是可能会有极大的开销。

    二、我已经有了3个系统,现在做了个passport,怎么整进去才好?
    最好的整合肯定是深层次整合,3套系统都用一套用户方案。但是,要是3个系统都有登陆,虽然用的同一套用户数据,但是要把3套用户验证方案整合成一个还是有很大工作量的。

    如果只是需要验证,或者分步骤进行的话,那么只把登陆分离出去,然后在登录的时候把状态写入passport就可以解决问题。一旦passport有了状态,然后在本域进行强行验证就可以了。甚至可以不用在在passport下放统一登陆窗口,可以沿用自己原先的登陆窗口,只是额外加一段代码,把登陆完的状态copy到passport上。当然,不在passport下登陆,复杂度会加强一些。

    凌驾于其他登陆方案上面再放一套用户验证无疑是最精简的办法。不但改造成本小,即使万一passport出了问题也不会影响其他各自系统的使用。

  • 相关阅读:
    java1.8 ConcurrentHashMap 详细理解
    java 常见高级开发面试题 非算法等特定岗 一
    java.util.concurrent各组件分析 一 sun.misc.Unsafe
    分布式锁 并发 自旋 优化 二
    分布式锁 并发 自旋 优化
    TreeMap 原理
    java8 LinkedHashMap 原理
    SpringBoot启动zipkin-server报错Error creating bean with name ‘armeriaServer’ defined in class path resource
    spring cloud启动zipkin,报错maven依赖jar包冲突 Class path contains multiple SLF4J bindings
    springboot2.0 management.security.enabled无效
  • 原文地址:https://www.cnblogs.com/birdshover/p/1200282.html
Copyright © 2020-2023  润新知