zoukankan      html  css  js  c++  java
  • 006. SSO 单点登录(同域SSO/跨域SSO)

    SSO 单点登录:一次登录,处处登录。

     只需在一个登录认证服务下进行登录后,就可访问所有相互信任的应用

    • 同域 SSO

    1. session-cookie机制:服务端通过cookie认证客户端。

      用户第一次登录后,服务端将返回一个cookie给客户端(这个cookie包含session id),用户下一次发起请求将在header带上这个cookie,服务端将能识别是哪一个客户端。

     

    /**
    * 完全同域
    * cookie 是端口无关的
    */
    Cookie cookie = new Cookie("sso","ssoCookie");
    cookie.setDomain("www.xxx.com");      //设置该cookie域,则在该域下的请求将带上该cookie
    cookie.setPath("/");    //该域下的所有路径的请求都使用该cookie
    response.addCookie(cookie);
    /**
    * 同父域
     *  cookie 是端口无关的
     */
    Cookie cookie = new Cookie("sso","ssoCookie");  
    cookie.setDomain(".xxx.com");
    cookie.setPath("/");
    response.addCookie(cookie);

        2. spring-session 共享: 解决同域下 集群  session共享的问题。(当服务端为集群而不是单点的时候,需要集群服务器间session共享才能实现session-cookie机制的同域SSO)

            实现方式:通过过滤器拦击请求,获取session数据保存到数据库(session持久化);需要获取session数据将统一从数据库获取。

    • 跨域 SSO

        1. session跨域: 同样是通过cookie认证客户端。

          cookie共享: 将所有信任域的cookie设置为相同的值,这样在不同域下发起的请求携带的cookie将会是一样的。

    /**
     *  同父域
     *  cookie 是端口无关的
     */
    Cookie cookie = new Cookie("sso","ssoCookie");
    cookie.setDomain(getDomainName(request));  //  将信任的域的cookie设置为相同的值,这样在不同域下登录使用的cookie将会是一样的,可以通过cookie校验
    cookie.setDomain("/");
    response.addCookie(cookie);

        2. Token身份认证

           服务端不需要记录session数据,用户登录后服务端将返回一个Token给客户端,客户端将这个Token保存起来;在下一次请求中将在header带上该Token,如果通过服务端校验,将能得到正确响应。

  • 相关阅读:
    高德地图信息窗体轮播及多组坐标点添加
    移动端适配及px转rem
    css伪类样式覆盖
    vue-amap-marker相关问题,信息窗体及自定义图片的偏移问题
    echart自定义图例样式及统计图颜色相关
    ts学习笔记[枚举类型]
    从面试中查漏补缺
    百度编译器插入自定义内容和样式(转)
    .net的母版页相关
    几种Position属性的用法
  • 原文地址:https://www.cnblogs.com/badboyh2o/p/10741018.html
Copyright © 2011-2022 走看看