在阅读本文前,需有一定的统一身份认证的知识,最好阅读或者使用过cas或者kerberos
1. 原理和协议
从结构上看,自定义协议包括SP、IDP Server和IDP Engine三部分(UA为浏览器)。其中IDP Server和IDP Engine独立部署,主要负责对用户进行认证,SP负责处理客户端受保护资源的访问请求,需要登录时,重定向到IDP Server。如下图所示:
图1. 协议图
前提:IDP Engine是可信的,SP首先向ID Engine注册(名称以及默认的callbackURL),生成sp编号,该编号代表该sp;票据分为三种:sp票据、UA票据和agent票据
协议交互流程如下:
- 1. UA访问SP,SP判断该用户是否已经登录,如果没有登录,SP产生认证请求;如果用户已经登录,直接响应结果
- 2. SP重定向到IDP Server,URL带有AuthnRequest参数,如果已经登录,跳转到4;如果没有登录,返回登录页面,进行认证操作
- 3. UA产生认证请求,URL带有CredentialsRequest参数。IDP Server接收到认证请求后,首先判断请求的合法性。然后判断该用户是否已经成功单点登录(从cookie去得UA票据,如果票据不存在,则认为该用户未登陆过)。如果用户登录过,则为使用UA票据为该sp申请sp票据和agent票据,根据请求信息查询到响应URL,将sp票据写在url参数并重定向到该url,如果未登录过,则跳转到4
- 4. IDP Server将CredentialsRequest请求参数包装成Credentials向IDP Engine发出认证请求(IDP Server需要向IDP Engine认证自己的身份),如果认证通过,则申请相应票据: sp票据、UA票据和agent票据以及响应的URL
- 5. 将UA票据写cookie
- 6. 将sp票据写在响应URL参数,重定向到响应URL
2. 安全性
- sp票据由IDP Engine用sp的密钥加密,只有sp能解密sp票据,保证了即使在网络传输过程被人截获也能保证用户信息的安全
- agent票据由IDP Engine用IDP Server的密钥加密,只有IDP Server能解密agent票据,agent票据保存在IDP Server中
- UA票据由IDP Engine进行非对称加密,用户的唯一标识,存在客户端
- 单点时IDP Server需要能够获取到该票据进行验证
3. 设计实现
2.1数据交互方式
通过URL传递数据。
2.2参数格式
2.2.1. AuthnRequest
内容 |
由SP属性集合、callbackURL组成 注:CallbackURL不是必须,可以使用IDP Engine注册的默认callbackURL
|
格式 |
Sp属性集合 Sp编号:sp 元素之间以“;”分隔,key与value之间用“:”分隔 比如:sp:12345;authnReqID:abc123;sign:signValue callbackURL:service 请求格式组成 req=请求属性格式&service=callbackURL
|
编码 |
Base64,在网络以Base64编码传输 |
内容 |
由请求属性集合,签名组成 |
格式 |
l 请求的属性主要有: 1、身份(由用户名和域组成,格式: 用户名@域): principal 2、当前时间:time 3、票据类型:type 4、随机数标识:nonce 5、IDP Server代理:agent 6、引用: reference 7、sp编号:sp 格式:time:x;type:x;principal:x;nonce:x;agent:x;reference:x;sp:x 元素之间以“;”分隔,key与value之间用“:”分隔 l 签名,对请求属性用私有密钥加密生成密文,格式: sign=加密算法:密文 私有密钥由用户名、域和密码 md5而成,格式 域 + ":" + 用户 + ":" + 密码
请求格式组成 req=请求属性格式&sign=签名&service=xxxx |
编码 |
Base64,在网络以Base64编码传输 |
上述自定义协议其实并不完全安全,你知道问题在哪么?
相关推荐
Android自定义相机 身份证扫描界面 支持android6.0 8.0拍照适配
本代码为自定义键盘,为身份证输入框或者数字输入框试用,如果需要定制其他键盘替换xml文件即可,导入项目可查看具体应用
自定义相机 自定义身份证拍照相机 有剪裁
Android自定义相机实现身份证拍照,并加入自动对焦与图片不规则裁剪
一个简单的身份证自定义键盘,实现了身份证键盘的基本功能,同时也加入了身份证前几位的快捷键(详见demo的1302键)。您也可以通过这个demo去改造下自己喜欢的样式,还是一个不错的参考的,有时间我会加上一个博文,...
二代身份证阅读器SAM安全模块接口协议.pdf 可开发身份证阅读器B/S端,C/S端软件, 可与已有项目集成, 部分项目已在github开源
Android自定义身份证相机-IDCardCamera 效果图: 功能特点 自定义相机界面 支持开启闪光灯 支持手动触摸屏幕对焦 支持自动对焦 支持图片自动裁剪 支持图片手动不规则裁剪 2 使用 Step 1. 添加JitPack仓库 在...
东信身份证读卡安全控制模块协议解析说明文件,完整的一次读卡流程包括:身份证寻卡 > 身份证选卡 > 身份证读卡,三个步骤 缺一不可(见通讯协议)。
Excel自定义函数_身份证号码校验
android自定义键盘,支持身份证键盘,ip地址键盘,数字键盘,支持身份证校验,ip地址校验,随机数字键盘
企业统一身份证认证平台建设方案.pdf
初中语文文摘社会美国为何没有统一身份证?
串口身份证开发通讯协议,兼容所有身份证阅读器
功能刚测试完毕,不知道什么原因审核不通过给我撤掉了,我上传的起码是亲测可用的吧,总比那些扣了积分下载的还不能用的强吧,功能部分登录进入主界面的扫一扫,二维码是自定义生成的,身份证识别是自定义相机图文...
借用身份证协议书.doc
本文实例为大家分享了iOS自定义身份证键盘的具体代码,供大家参考,具体内容如下 项目中有需要需要身份证的输入框, 用自带的输入切换很麻烦(如果最后一位带X), 所以自定义一个身份证输入键盘. 自定义键盘的关键: ...
二代身份证识别器的二次开发,此为C#代码,该代码在实际项目中应用。
【GIS应用】自定义转换器-使用FME验证身份证号码.zip