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的value值
2.value如果不存在返回错误 登录已经失效
3.value存在返回value作为ID 进行操作

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

时间: 2024-08-30 11:26:21

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

ASP.NET 安全认证(三): 用Form 表单认证实现单点登录

asp.net|安全 "等了好久终于等到今天,写了好久终于就快完结,但是网友的反应却让我有一些的伤心.盼了好久终于盼到今天,忍了好久终于把此文撰写,那些受冷落的无奈早就无所谓,累也不说累"(歌词<今天>新演绎).看着人家的 Blog 文章的评论是一条接一条,再瞧瞧自己:"无人问津呐,真-无-奈--唉,没人理我,还是回家吧.""哎,还没开始写,怎么就走了?回去干什么呢?"回去写作业去啊,上回交待的课外作业你做了没?(注:http://b

ASP.NET安全认证(三): 用Form 表单认证实现单点登录

asp.net|安全 "等了好久终于等到今天,写了好久终于就快完结,但是网友的反应却让我有一些的伤心.盼了好久终于盼到今天,忍了好久终于把此文撰写,那些受冷落的无奈早就无所谓,累也不说累"(歌词<今天>新演绎).看着人家的 Blog 文章的评论是一条接一条,再瞧瞧自己:"无人问津呐,真-无-奈--唉,没人理我,还是回家吧.""哎,还没开始写,怎么就走了?回去干什么呢?"回去写作业去啊,上回交待的课外作业你做了没?(注:http://b

请求一下一个简单的例子

问题描述 folderbrowerdialogopen=newfoldbrowerdialog()if(open.showdialog()==dialogresult.ok)stringpath=open.selectdpathsystem.io.directoryinfoinfo=newsystem.io.directoryinfo(path)手机打的抱歉为什么这里显示path是不合法的路径呢我是新手谢谢 解决方案 解决方案二:不知道你的path具体是什么解决方案三:就是一个文件夹路径啊解决方

PushState+Ajax实现简单的单页面应用SPA例子

单页面应用(Single Page Application)简称SPA,使用SPA构建的应用优点有用户体验好.速度快,内容的改变不需要重新加载整个页面,避免了不必要的跳转和重复渲染,从而相对减轻了服务器压力,SPA在WEB移动端应用非常广泛. 我们在上一篇文章Javascript实现前端简单路由中提到的前端路由,可以在不刷新整个页面的情况下,通过变换地址栏的hash来实现页面局部加载. 今天我要给大家介绍的是使用HTML5的PushState+ajax实现不刷新整个页面,而地址栏变换,页面局部刷

用php做一个简单的表单

PHP最有用的特性之一是它能够自动将表单中的变量值赋予PHP变量.这使得表单处理变得非常快捷. 因此,如果你送出一个内含输入栏位值的表单如下: <INPUT TYPE=TEXT NAME="name" VALUE="Glen Morris"> 当你用PHP处理此页面,$name变量的值就会是 Glen Morris. 因此,你可以用如下的方式把值打印出来: echo "Hi $name!"; 或者像这样测试其值: if ($name

小米-Android 一个简单的post请求遇到的问题

问题描述 Android 一个简单的post请求遇到的问题 用volley的post请求,在其它手机上测试 线上path+轮播图url 返回正常的json数据,用小米4手机 返回一个404错误的html 如图: 经测试 在小米4手机上 线上path+其他url 获取的是正常json 线下测试path+轮播图url也能获取正常json 但是线上path+轮播图url就会返回该html 有没有大神知道什么原因?怎么解决?有人说是因为运营商,该手机用的移动卡,有关系吗? 解决方案 感觉可能跟移动卡有关

做一个简单的VC++的mfc单文档应用程序

问题描述 做一个简单的VC++的mfc单文档应用程序 帮忙做一个基于VC++6.0的mfc单文档应用程序(绘图),有菜单栏工具栏和快捷菜单,用到分割窗口,组合框,文档序列化 解决方案 google Scribble 示例:MDI 绘图应用程序 解决方案二: 就你的需求,不要写一行程序,用向导生成,勾选切分视图和从CFormView继承,放上组合框就好了.文档序列化是默认支持的. 解决方案三: 解决方案四: 如果你要画图,可以直接下载msdn里面切分视图画图的那个例子,然后加上一个controlb

mvc-建一个简单的MVC结构,为什么用户请求的数据总是会被替换?

问题描述 建一个简单的MVC结构,为什么用户请求的数据总是会被替换? 在学着用golang开发一个简单的 MVC 结构时,IndexCtrl 继承了 Controller 之后,可以读取它的 Request 和 ResponseWriter 属性值,可是当有另一个请求的时候,上一个请求如果没处理完,这两个属性值也变成新的了. 请问下面这段代码要怎么改才可以在 IndexCtrl 的 GET() 执行时,得到的 Controller 的那两个属性值都是独立的? func main() { var

一个简单粗暴的前后端分离方案(转)

  项目背景 刚刚参加完一个项目,背景:后端是用java,后端服务已经开发的差不多了,现在要通过web的方式对外提供服务,也就是B/S架构.后端专注做业务逻辑,不想在后端做页面渲染的事情,只向前端提供数据接口.于是协商后打算将前后端完全分离,页面上的所有数据都通过ajax向后端取,页面渲染的事情完全由前端来做.另外还有一个紧急的情况,项目要紧急上线,整个web站点的开发时间只有两周,两周啊!于是在这样的背景下,决定开始一次前后端完全分离的尝试. 之前开发都是同步渲染和异步渲染混搭的,有些东西可以