`
udukwilliam
  • 浏览: 33643 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

统一身份证自定义协议(2)

 
阅读更多

 

上一篇文章介绍了自定义协议,但是从某种角度来看,上面的自定义协议并不是一个完全可靠的协议,为何?待我慢慢道来。

简单的来讲,统一身份认证应该分为两块,一是身份认证,一是统一认证(可以理解为sso),如果要集成多协议,比如SAMLCAS,是在统一认证进行集成,而不是身份认证。

 

 

1

  •  1)何为身份认证,我们从图1 的过程来阐述。假设用户没有登陆过任何系统,某用户访问sp1sp1检查发现该用户没有登陆过,即重定向到ServerServer返回一个页面让用户输入用户名、密码等,然后提交表单到Server进行验证。红色部分即为身份认证的过程。为什么,因为对于CASSAML协议来说,不关注用户的身份认证的过程,而是关注步骤6返回的内容是否是符合某个协议格式的内容当然内容是加密过的)当该用户访问sp2时,sp2发现该用户没有登陆过,重定向到ServerServer检查发现该用户已经认证过,即生产相应格式的响应到sp2sp2检查校验通过,即可访问sp2,而这个过程可以理解为统一认证过程(简单的来讲就是抛开步骤3的过程)
  • 2)在有前面的基础后,我们来阐述为什么自定义协议1并不是一个可靠的协议,到底不可靠在哪?问题出在了身份认证过程中,即步骤3以后的操作,我们知道步骤3会发起一个身份认证的请求,而Server并不能认证身份,而是将请求进行封装加上自己的签名交给了Engine进行认证,认证后返回UA票据,而Server根据持有的UA票据向Engine申请SP票据和Server票据(我们知道sp票据是Engine用sp的公钥进行签名加密的,Server票据是Engine用Server的公钥进行签名加密的),问题就出在这里,这里导致了Server的权限过大,Server不能为sp进行签名,如果Server要求Engine为非sp签名的请求进行签名加密,即产生了伪造。举个简单的例子来说:有A、B、C三人(A可理解为sp,B为Server,C为Engine),C负责印章,当A来盖章的时候,C认识A,C识别到A允许签名盖章、B来盖章的时候,C认识B,C也可以为B签名盖章,但不允许B在没有A的委托下为A进行签名盖章(即B跟C说为我盖个A的章吧,这是不允许的)。换个更简单的例子就是使用银行卡消费时,只有本人签名才有效,不能说A消费时签B的名,这不符合安全的理念。现在我们来改进自定协议1,让它变得更安全。

1.原理和协议

结构上,自定义协议还是包括SP、IDP Server和IDP Engine三部分。这时候我们需要建立一个信任体系,我们认为IDP Server是可信的。

第一步,sp、IDP Server和IDP Engine都有自己的身份的,所以我们首先得认证自己和对方,但是我们的信任体系的建立是我们认为IDP Server是可信的。

第二步,SP和IDP Server需要向IDP Engine注册生成自己的编号和密钥。

如下图所示:

 

 

图2

    协议交互流程如下:
  •  1.SP初始化的时候,因为信任体系是信任Server,SP的统一认证交给Server,这时候需要建立一个SP和Server之间的共享密钥。如何申请?SP用自己的密钥签名向Server发起一个代理向Engine申请共享密钥的申请(为什么是向Engine,因为只有Engine知道sp和Server的密钥,也只有Engine能产生共享密钥,相当于就是Engine就是sp和Server信任的桥梁,共享密钥是有时间限制的,一般来讲一天)
  • 2.Server认证不了请求的真实性,于是加上自己的签名将请求转发给Engine,Engine认证该请求来自SP和Server(因为Server加上了自己的签名),认证通过,生成共享密钥,分别使用sp的密钥和Server的加密返回给Server和sp,于是SP和Server持有了sp和Server之间的共享密钥。
  • 3.UA访问SP,SP判断该用户是否已经登录,如果没有登录,SP产生认证请求;如果用户已经登录,直接响应结果。
  • 4.SP重定向到IDP Server,URL带有AuthnRequest参数,如果已经登录,跳转到5;如果没有登录,返回登录页面,进行认证操作。
  • 5.UA输入用户密码等生成身份认证请求,URL带有CredentialsRequest参数。IDP Server接收到认证请求后,首先判断请求的合法性。然后判断该用户是否已经成功单点登录。如果用户登录过,则IDP Server使用sp和IDP Server的共享密钥生成响应到sp;如果未登录过,则跳转到4。
  • 6.IDP Server将CredentialsRequest请求参数包装成Credentials加上自己的签名向IDP Engine发出身份认证请求(IDP Server需要向IDP Engine认证自己的身份,相当于sp委托IDP Server 向IDP Engine认证自己的身份),如果认证通过,IDP Engine 使用 IDP Server的密钥加密结果并返回给IDP Server。
  • 7.IDP Server根据请求协议将IDP Engine返回的结果包装成不同的协议并将其使用sp和 IDP Server之间的共享密钥进行加密返回给sp。
  • 8.SP检查验证密文。

 

2.安全性

1.保证了只有SP的请求才能让Engine为SP签名,不会出现IDP Server权利过大的问题保证安全,解决了自定义协议1的存在的不足,安全性更进一步提高。

2.将身份认证和统一认证分开,更容易集成多协议的支持。

3.设计实现

3.1数据交互方式

通过URL传递数据。

 

3.2参数格式

3.2.1. AuthnRequest

内容

由SP属性集合、callbackURL、签名组成

注:CallbackURL不是必须,可以使用IDP Engine注册的默认callbackURL

格式

Sp属性集合

1、Sp编号:sp

元素之间以“;”分隔,key与value之间用“:”分隔

比如:sp:12345;authnReqID:abc123;sign:signValue

callbackURL:service

签名:对请求属性使用共享密钥进行加密

 

请求格式组成 req=请求属性格式&service=callbackURL

编码

Base64,在网络以Base64编码传输

 
3.2.2. CredentialsRequest

内容

由请求属性集合,签名和callbackURL组成

格式

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而成,格式

域 + ":" + 用户 + ":" + 密码

lcallbackURL:service

 

请求格式组成 req=请求属性格式&sign=签名&service=xxxx

编码

Base64,在网络以Base64编码传输

 

 

 

  • 大小: 19.2 KB
  • 大小: 18.9 KB
分享到:
评论

相关推荐

    ireportJAVA报表中文帮助

    2. **样式与样式表**:可以自定义样式,如字体、颜色、边框等,也可以引用外部CSS样式表,实现报表的统一风格。 3. **子报表与分组**:子报表用于嵌套报表,分组则能按指定字段对数据进行分组展示,方便数据分析。 4...

    ISO7816-1-2-3等,iso7886-1,C,C++源码.zip

    总的来说,ISO7816系列标准为智能卡与读卡器之间的通信提供了一个统一的框架,而提供的C和C++源码则可以帮助开发者快速地实现这个通信过程。无论是对于硬件设计还是软件开发,这些标准和源码都是智能卡领域不可或缺...

    LDAP在linux上的部署与应用

    2. **创建Schema**:可以创建自定义Schema以满足特定组织的需求,例如添加公司特有的用户属性或资源类型。 3. **导入Schema**:将定义好的Schema文件(通常为`.ldif`格式)导入到LDAP服务器,`ldapadd -Y EXTERNAL ...

    36_酒店管理1

    1. 统一系统设置界面:所有系统参数设置在一个界面完成,包括客房设置、参数设置、常用选项、备注列表、房态颜色定义、会员与协议客户、仓库和商品管理等,提高了工作效率。 2. 个性化房态展示:系统允许自定义房态...

    正则测试小工具自带常用表达式

    5. **URL**:URL(统一资源定位符)是网页或网络资源的地址,包含协议、主机名、路径等部分。一个基本的URL正则表达式可能会很长,但通常会包括`http(s)://`、域名、路径和可能的查询参数。 6. **身份证号**:中国...

    饮食通《酒店管理系统》

    2、系统采用标准Windows图形界面,界面风格用户可以根据自己的爱好进行设置。整套系统风格统一,界面整洁美观,设计思路清晰、学习培训简单,操作使用方便,有利于操作员顺利掌握、熟练使用。酒店行业从业人员的...

    饮食通星级酒店管理系统

    2、系统采用标准Windows图形界面,界面风格用户可以根据自己的爱好进行设置。整套系统风格统一,界面整洁美观,设计思路清晰、学习培训简单,操作使用方便,有利于操作员顺利掌握、熟练使用。酒店行业从业人员的...

    公租房联网智能锁解决方案.docx

    房屋的具体地址和房间编号需要与公安系统登记的地址一致,以保证信息的统一性和准确性。 系统具备灵活的钥匙管理功能,支持延期、挂失、解挂、退卡/注销等操作。当钥匙被注销时,系统会发出警示信息,防止未授权的...

    智能图书管理系统实用.pdf

    零星订购支持单独编辑订单,查询和修改订购数据,并具备基于Z39.50协议的检索功能,以确保图书信息的准确性。批订购则允许对同一征订目录进行批量处理,同时显示实时财务状况,并自动分配文献存放位置。 2. 编目...

    通用系统工具软件安防系统集成管理

    2. **编写适配器程序**:根据不同的协议,编写相应的适配器程序,这些程序能够将硬件设备的数据转换成统一的格式,以便系统集成管理软件能够理解。 3. **接口标准化**:建立一套标准化的接口规范,确保所有硬件设备...

    Excel模板员工录用通知单.zip

    1. **基本信息**:包括员工的姓名、性别、出生日期、身份证号等个人信息,以及应聘职位、入职日期等与工作相关的具体信息。这部分旨在确保信息的准确无误。 2. **工作条款**:描述员工的工作职责、工作时间、工资...

    Excel表格+Word文档各类各行业模板-员工到职单.zip

    - 基本信息:员工的姓名、性别、出生日期、身份证号、联系方式、家庭住址等。 - 教育背景:学历、专业、毕业学校等。 - 工作经历:前任公司、职位、工作年限等。 - 技能证书:相关资格证书、专业技能等级等。 -...

    跨浏览器控件SDK使用说明

    SDK的主要特点是提供了一个统一的接口,使得开发者可以在不同浏览器环境中使用高拍仪设备的功能。 **主要功能:** 1. **设备选择**:SDK允许用户在多个高拍仪设备之间进行选择。 2. **设备预览**:支持预览设备...

    ocf组件.zip,智能卡的操作利器!

    PC/SC接口是个人计算机与智能卡通信的一种国际标准,它定义了操作系统与智能卡读写器之间的通信协议,确保不同厂商的产品可以相互兼容。OCF组件实现了这一接口,为开发者提供了一个统一的、跨平台的访问层,使得开发...

    酒店管理软件|辰星酒店管理软件 星级版

    提供精确人性化的查询和模糊查询,自定义报表和屏幕显示同步进行,支持图形与表格相结合,提供帐单、外币结算,满足涉外酒店需要。 三、接待预定管理系统 1、预定管理: 预定登记、预定客人信息录入、预定时间、...

    精易模块[源码] V5.15

    5、修复“时间_取身份证判断”出现17位身份证的BUG,感谢易友【@求其改个名】反馈。 6、新增“类_托盘”类模块,源码来自彗星托盘图标模块,感谢源作者。【带实例】。 MD5:F4ECA009078166001A6577C1E502D7E6 精易...

    明日科技C#开发入门及项目实战

    实例002 统一窗体中控件的字体设置 实例003 设置程序代码行号 实例004 通过“格式”菜单布局窗体 实例005 为项目添加dll文件引用 实例006 为项目添加已有类 实例007 为项目添加第三方控件 实例008 为项目添加已有...

    VeryIDE Bee 互动营销**台 v1.5 UTF-8.rar

    修正 全部应用身份证号码验证失效(18位,去掉过时的15位)的问题,感谢 得意生活 提交问题 修正 随机广告在三条以上时同时展示多条广告的问题,感谢 暨阳社区 反馈问题 修正 免费版不能正常使用 Flash 幻灯广告的...

Global site tag (gtag.js) - Google Analytics