分布式系统-单点登录


前言: 单点登录其实是一个概念,主要是为了解决一次登录,多系统(本系统或外部系统)之间不需要重复登录的问题,就目前来说,主流的解决方案针对业务场景分为3个方向:

1: 同一公司,同父域下的单点登录解决方案.

  如[] [] []

  基于cookie开源项目代表: JWT();

      

  需要注意jwt token存储在哪里的问题:

    首先我们要明确csrf和xss两种漏洞的不同之处:

      csrf 攻击无法获取第三方的 cookie,而是直接使用 cookie进行查询的时候会自动携带 cookie。

      xss攻击通过代码注入可以获取 cookie。需要设置转义。
    方式一、客户端使用 cookie直接认证
      需要设置 cookie为 httpOnly,可以防止 xss攻击。需要设置伪随机数 X-XSRF-TOKEN,防止csrf攻击。 (推荐!不 需要处理 xss,并且xsrf 随机数有完善的应用机制)
    方式二、 客户端使用 auth授权头认证,token存储在 cookie中
      token存储在 cookie中,需要防止xss攻击。可以防止 csrf攻击,因为 csrf只能在请求中携带 cookie,而这里必须从 cookie中拿出相应的值并放到 authorization 头中。
      实际上cookie不能跨站(同源政策)被取出,因此可以避免 csrf 攻击。(适用于 ajax请求或者 api请求,可以方便的设置 auth头)
    方式三、可以将token存储在 localstorage里面
      token存储在 localstorage里面,需要防止xss攻击。同理可以防止csrf攻击。实现方式可以在一个统一的地方复写请求头,让每次请求都在header中带上这个token,
       当token失效的时候,后端肯定会返回401,这个时候在你可以在前端代码中操作返回登陆页面,清除localstorage中的token。(适用于 ajax请求或者 api请求,可以方便的存入 localstorage)
 

2: 同一公司,不同域下的单点登录解决方案.

  如[] []

  基于中央认证服务器开源项目代表:CAS();

      

 

3: 不同公司之间,不同域下的 第三方登录功能实现.

  如第三方网站支持qq登录,微信登录,微博登录等;

  基于OAuth2.0协议各大公司自己的支持;

 

  没有用过,不太了解,不过微信公众号开发获取用户授权好像就是oauth2.0,那首先用户授权登录获取一个到code,拿到code换取access_token,然后就能使用access_token来获取用户信息了

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM