zoukankan      html  css  js  c++  java
  • 单点登录学习笔记

    单点登录(SSO)概述

    概念:简单点说就是,用户只需要登录一次就可以访问所有相互信任的应用系统。

    SSO体系结构:

    1.认证中心

    2.用户与账号系统、用户数据获取接口

    3.客户端模块即授权验证(用户请求系统时,首先要对请求进行拦截)

    4.令牌(token)  可以看作钥匙

    SSO认证流程:工作原理和工作过程

    1.浏览器发起访问系统的请求

    2.客户端模块对用户请求进行拦截

    3.验证token是否存在(不存在时重定向到登陆界面)

    4.token存在时验证token是否有效(有效时可以访问系统)

    5.token无效时重定向到登陆界面

    6.进入登录界面,登录成功后进行授权(授权失败时提示授权失败)

    7.授权成功则生成token令牌

    8.生成token之后,再次返回到资源请求后重新再次进行验证

    SSO相关核心技术:

    1.HTTP协议的基础知识(无状态的协议)

    HTTP处理的一般分为三个步骤:接收请求、处理请求、返回结果。

    因为HTTP是无状态的,所以无法判断第二个问题中问的是什么多少钱一支。

    由于以前浏览器的请求都是用于请求的静态的资源,为了保持请求的高效,所以将HTTP设为了无状态,但随着不断的发展,HTTP无状态的已经无法处理更多的问题了,所以就需要对会话的维持:

    cookie:每次网络请求中,服务端返回给每个请求的唯一标识,每次发请求时会被传送【客户端】

    session:服务端维护的那个map结构,存的是每个唯一标识以及对应的值【服务端】

    为了避免缓存对测试结果的影响,我们可以使用隐身模式来进行试验(隐身窗口没有缓存)

    2.如下进行实例的演示:

    第一次请求浏览器端如下:

    然后在服务端中:session.setAttribute('what','铅笔')

    第二次请求浏览器端如下:

    第二次请求服务端需要做的处理:(获取唯一标识,并返回结果)

    String what = (String)session.getAttribute("what");   //获取存在服务端session中那么为what的唯一标识值
    String resp  = null;
    if ("铅笔".equals(what)){
    resp = "$1";
    }
    else {
    resp = "i don't know"
    }

     SSO相关核心技术:

    1.HTTP、cookie和session

    2.cookie与session的关系

    3.cookie、SSO令牌的载体

    4.决定cookie内容、生命周期和有效范围的7个属性:

      1.name 和 value  【即唯一标识符的name和value】

      2.expires       【cookie的生命周期,而通常我们默认使用的JESSIONID的存活时间就是浏览器关闭,即只存在浏览器内存中】

      3.path和domain   【cookie的路径和域的设置,如果path不设置,默认为当前文件的路径;某一个域下的cookie只能在这个域内进行传送】

      4.httpOnly和secure  【httpOnly只有在网络传送(浏览器请求)时有效,使用javascript无法操作,secure只有在https协议中使用】

    5.javascript操作做cookie的方法

    var cookies = document.cookie;   //获取cookie值,结果以字符串的方式展示出来,比如c1=test1;c2=test2
    console.log(cookies);
    documet.cookie = "c3=test3" ; //添加cookie
    document.cookie = "c2=new";  //修改cookie
    document.cookie = "c4=test;expires=-1000;path=/;domain=www.baidu.com";//添加cookie及其他的配置

    6.Java web应用中操作cookie的方法

    //读cookie
    Cookie[] cookies = request.getCookies();
    if (cookies != null){
      for (Cookie cookie : cookies){
        System.out.println(cookie.getName() + ","
                +cookie.getValue() + ","
                +cookie.getMaxAge() + ","
                +cookie.getPath() + ","
                +cookie.getDomain() + ","
                +cookie.getSecure() + ","
                +cookie.getHttpOnly() );
    //写cookie
    Cookie cookie = new Cookie("mycookie",String.valueOf(System.currentTimeMillis()));//name,value
    cookie.setHttpOnly(false);//如果为true,javascript不能处理
    cookie.setMaxAge(24*60*60);//expires:24小时过期
    cookie.setSecure(false);//如果为true,仅支持https协议
    cookie.setPath("/");
    cookie.setDomain("www.baidu.com");
    response.addCookie(cookie); 
    response.addCookie(cookie)

    如上设置了自定义的cookie后,当浏览器发送请求后,response返回的cookie如下:

    第二次访问时,结果如下:

     另外:

      1.如何判断是同一个cookie:即name,secure,path,domain的值都一致是才判断该cookie是同一个cookie。

      2.cookie是没有真正的删除操作,只有把生命周期设置为一个过去的时间,cookie.setMaxAge(-1000)

    7.filter,web层的拦截器

     拦截请求,比如只拦截某个路径下的请求。

    cookie使用时需要注意的事项:

    1.过多过大的cookie浪费网络流量【浏览器发送请求是,当前作用域下的cookie都会被携带】

    2.浏览器对cookie有个数限制

    3.浏览器对cookie有大小限制

    4.cookie不要存放敏感信息

     同域下单点登录系统的分析与设计:

    认证中心(服务器端):

      1.验证token有效性

      2.提供登录页面,授权成功生成令牌token

      3.提供注销接口,提供单点退出功能

    客户端模块:

      1.拦截用户请求,提取令牌,交给认证中心验证

      2.验证成功,则获取用户基本信息,附加到请求中供业务系统使用

      3.验证失败,将用户跳转到登陆界面

    用户与账号:

      1.提供用户登录退出操作日志

      2.提供用户信息查看、管理、统计功能

      3.提供接口允许业务系统同步用户信息

      4.提供接口允许特定业务系统新增与修改用户信息

    如下为单点登录运作流程:(灰白色表示:客户端模块;蓝色表示:认证中心;浅黄色表示:业务系统)

    如下为单点退出运作流程:

     服务端的实现:

    客户端的实现:

  • 相关阅读:
    【原创翻译】The Free Lunch Is Over
    【原创】基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(二)
    【原创】基于ZYNQ7000的交叉编译工具链Qt+OpenCV+ffmpeg等库支持总结(一)
    实现内容提供者步骤
    为什么需要内容提供者
    aidl的应用场景
    aidl介绍
    百度音乐盒框架
    通过接口方式调用服务里面的方法
    通过bindservice方式调用服务方法里面的过程
  • 原文地址:https://www.cnblogs.com/fireporsche/p/9385104.html
Copyright © 2011-2022 走看看