当前位置: 首页 > news >正文

1.请求安全-- 一个简单的 单设备登录 单点登录

一个简单的 SSO 单点登录 单设备登录 解决方案

SSO英文全称Single Sign On,单点登录。SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制。它是目前比较流行的企业业务整合的解决方案之一。

实现SSO的技术主要有: (1)基于cookies实现; (2) Broker-based(基于经纪人),例如Kerberos等; (3) Agent-based(基于代理人)在这种解决方案中例如SSH等; (4) Token-based,例如SecurID,WebID,现在被广泛使用的口令认证; (5) 基于网关Agent and Broker-based; (6) 基于安全断言标记语言(SAML)实现;

但是本文今天不会用到以上方法,但是我们使用方法类似于Token;

写本次文章的起初是为了解决链接捕获访问服务器的问题,但是单凭单点登录和单设备登录是解决不了这个问题的,要配合上(加密,MD5校验,请求唯一性验证,单点登录,单设备登录)来组成一个比较完善的安全验证机制.(后面文章会一一说道)

下面开始说正题,对于API来说一般需要单点登录的系统都需要进行登录的操作,那登录操作我们会做下面几件事情.

1.获取用户名密码进行登录验证用户是否有效作判断. 2.拿着返回的ID给前端让他可以进行进一步操作.

当然可以直接用ID 直接实现单点登录 但是无法实现单设备登录而且直接暴露安全性担忧

基本登录接口做的操作就是以上两种,那么关键点来了,我在思考分析的时候在想如果每次调用登录获取的ID都是一个临时ID. 当下次登录的时候失效是不是就可以达到单设备登录的效果了,这个临时ID对应着真正的用户ID每次客户端请求都是拿着临时ID请求过来然后我们做验证,不就行了嘛.而且这个临时ID是后端共享的只有一个登录接口或获取临时ID其他所有模块都能使用来达到单点登录. 这样就解决了单设备登录和单点登录的问题.

当然如何实现是最后一个问题

既然是临时ID而且每个接口都会去读取验证,那当然不能用数据库,最好我选择了用NOsql中的Redis来作为临时ID的临时存储

登录接口需要做的事情如下:

1.第一步从Redis中用Id取临时ID 检测有没有 
2.生成Cipher(临时密码也就是临时ID)
3.根据第一步检测做不同的处理 如果存在删除原有的 Cipher关联ID 的key-value 
4.创建两个key-value 一个是id对应Cipher  一个是Cipher对于Id

验证验证需要做的事情

1.通过客户端请求的Cipher获取Redis的value2.value如果不存在返回错误 登录已经失效
3.value存在返回value作为ID 进行操作

通过以上方法就解决的 标题所述的 单点登录 单设备登录的问题 

相关文章:

  • CST UTC
  • 在CentOS上安装与配置Tomcat
  • Modular Multiplicative Inverse(模乘逆元)
  • 线程同步辅助类——CountDownLatch
  • Java中的并发工具
  • ShareSDK的使用文章
  • Linux查看程序端口占用情况
  • 如何在VS2008中自定义多项目模板
  • 程序员,我们都是夜归人【转】
  • 【架构】微服务系列文章
  • 快速查询Python脚本语法
  • 基础业务集成开发平台(BusinessWorks) - 概要设计篇
  • java基础----java调用oracle存储过程(转)
  • linux GTK 安装
  • 如果在ecshop中自定义添加模板
  • [PHP内核探索]PHP中的哈希表
  • es6--symbol
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java面向对象及其三大特征
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • markdown编辑器简评
  • mysql innodb 索引使用指南
  • Swoft 源码剖析 - 代码自动更新机制
  • 百度地图API标注+时间轴组件
  • 关于字符编码你应该知道的事情
  • 回顾2016
  • 如何解决微信端直接跳WAP端
  • 如何设计一个微型分布式架构?
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 实现菜单下拉伸展折叠效果demo
  • 学习Vue.js的五个小例子
  • raise 与 raise ... from 的区别
  • 测评:对于写作的人来说,Markdown是你最好的朋友 ...
  • 国内开源镜像站点
  • ​​​​​​​GitLab 之 GitLab-Runner 安装,配置与问题汇总
  • ​configparser --- 配置文件解析器​
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • (70min)字节暑假实习二面(已挂)
  • (二)学习JVM —— 垃圾回收机制
  • (附源码)node.js知识分享网站 毕业设计 202038
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)基于SpringBoot和Vue的厨到家服务平台的设计与实现 毕业设计 063133
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (区间dp) (经典例题) 石子合并
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一一四)第九章编程练习
  • (转)memcache、redis缓存
  • (转)ObjectiveC 深浅拷贝学习
  • (转)visual stdio 书签功能介绍
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .NET Core引入性能分析引导优化
  • .Net Remoting(分离服务程序实现) - Part.3
  • .net 验证控件和javaScript的冲突问题