一种基于CMSP的对象存储的RESTful服务的身份认证实现方法与流程

文档序号:19632017发布日期:2020-01-07 11:35阅读:587来源:国知局

本发明涉及web服务的身份认证的实现技术领域,具体提供一种基于cmsp的对象存储的restful服务的身份认证实现方法。



背景技术:

cmsp实现了消息发布、订阅、推送、发送、复制、分发、服务触发等功能,在此基础上实现了对象存储功能。对象存储主要有两个概念,bucket和对象。对象存储服务中包含多个bucket,bucket中包含多个对象。对象存储中也有用户,可以控制用户拥有哪些bucket和对象等资源,以及对这些资源有哪些操作的权限等。为了方便客户访问对象存储,对外提供了restful服务接口。

web服务一般采用用户名、密码登录认证,基于token的认证、oauth第三方认证等方式,这些方式或要求服务端始终保持一个会话,或先身份验证再获取token等需要多次服务端交互的方式,而且这些认证都有超时时间。

对象存储可以实现诸如网盘之类的功能,可以通过网络url链接来访问某个对象,而且一般有操作权限和时间限制。这些功能需求基于常用的web服务的身份认证访问不能很好的支持,需要一种更简洁有效的实现方式来支持对象存储的应用场景,既能满足功能需求,又要减少服务端的负担和逻辑复杂性,且易于实现分布式服务部署。



技术实现要素:

本发明的技术任务是针对上述存在的问题,提供一种简洁高效,能够支持多数对象存储的应用场景的基于cmsp的对象存储的restful服务的身份认证实现方法。

为实现上述目的,本发明提供了如下技术方案:

一种基于cmsp的对象存储的restful服务的身份认证实现方法,该方法基于hamacsha1算法,hmac进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,再次应用哈希函数,在发送方和接收方共享机密密钥的前提下,hmac用于确定通过不安全信道发送的消息是否已被篡改。

cmsp即浪潮云信息服务引擎。该基于cmsp的对象存储的restful服务的身份认证实现方法支持客户使用http客户端和通过对象url来访问对象。实现该web服务的身份认证功能,该功能实现方式简洁高效、支持多数对象存储的应用场景。

作为优选,发送方计算原始数据的哈希值,并将原始数据和哈希值放在一个消息中同时传递,接收方重新计算所接收消息的哈希值,并检查计算所得的hmac是否与传送的hmac匹配,从而确定通过不安全信道发送的消息是否已被篡改。因为更改消息和重新生成正确的哈希值需要密钥,所以对数据或哈希值的任何更改都会导致不匹配。因此,如果原始的哈希值与计算得出的哈希值相匹配,则消息通过身份验证。

作为优选,该方法中,对象存储应用场景中包括两种请求发起方式,通过http客户端发起的调用和通过网页url发起的调用。

要求存储服务端保存用用户名及密码、客户保存自己的用户和密码且不被泄露。

作为优选,在请求中包含请求的用户、请求的时间或过期时间和有效数据信息的签名。

作为优选,生成签名使用用户的密码、请求的方法、要访问的资源,服务端在收到请求后获取请求中包含的用户及请求涉及的资源重新生成一个签名,与请求中携带的签名比较,若一致则表示请求有效。

请求的方法包括put/get/delete/post等,要访问的资源包括bucket/object等。

作为优选,通过http客户端发起的调用,http请求头部的date字段记录请求发起的时间,在http请求头部的authorization字段保存请求身份验证信息,authorization字段中包含用于名及对请求资源信息的签名。格式为“iossusername:signature”,其中的username和signature为实际值,ioss为格式固定的值。

作为优选,http请求头部的date字段记录请求发起的时间具体为,对象存储服务端设定一个时间差值,请求与服务端时间差超过时间差值则认为请求无效,date字段的值使用gmt时间。

作为优选,通过网页url发起的调用,发起请求的用户、时间和签名通过请求参数进行传递。格式为http://abc?username=??&expires=??&signature=??。这里username参数为请求用户名。expires为请求的过期时间(因为url链接可能会发布出去,不能限制请求时间,而是限制此url截止到某个日期前有效)。expires为unix时间戳。signature为签名信息,生成方式与http客户端请求方式类似。

通过http客户端发起的调用和通过网页url发起的调用都传递了请求的用户、请求的时间或过期时间以及签名和数据传递的方式。在使用中的签名将hmac算法计算值经过base编码生成的。

与现有技术相比,本发明的基于cmsp的对象存储的restful服务的身份认证实现方法具有以下突出的有益效果:通过所述基于cmsp的对象存储的restful服务的身份认证实现方法客户端不需要登录服务器即可发起对象存储服务的调用,服务端可以根据本次请求的内容验证请求是否有效,因为服务端不需要会话,所以可分布式部署以提高负载扩展能力,同时支持了各种对象存储的应用场景,如网盘分享文件下载的方式,具有良好的推广应用价值。

具体实施方式

下面将结合实施例,对本发明的基于cmsp的对象存储的restful服务的身份认证实现方法作进一步详细说明。

实施例

本发明的基于cmsp的对象存储的restful服务的身份认证实现方法,基于hamacsha1算法,hmac进程将密钥与消息数据混合,使用哈希函数对混合结果进行哈希计算,将所得哈希值与该密钥混合,再次应用哈希函数,在发送方和接收方共享机密密钥的前提下,hmac用于确定通过不安全信道发送的消息是否已被篡改。发送方计算原始数据的哈希值,并将原始数据和哈希值放在一个消息中同时传递,接收方重新计算所接收消息的哈希值,并检查计算所得的hmac是否与传送的hmac匹配,从而确定通过不安全信道发送的消息是否已被篡改。因为更改消息和重新生成正确的哈希值需要密钥,所以对数据或哈希值的任何更改都会导致不匹配。因此,如果原始的哈希值与计算得出的哈希值相匹配,则消息通过身份验证。

该方法中,对象存储应用场景中包括两种请求发起方式,通过http客户端发起的调用和通过网页url发起的调用。要求存储服务端保存用用户名及密码、客户保存自己的用户和密码且不被泄露。

在请求中包含请求的用户、请求的时间或过期时间和有效数据信息的签名。生成签名使用用户的密码、请求的方法、要访问的资源,服务端在收到请求后获取请求中包含的用户及请求涉及的资源重新生成一个签名,与请求中携带的签名比较,若一致则表示请求有效。请求的方法包括put/get/delete/post等,要访问的资源包括bucket/object等。

其中,通过http客户端发起的调用,http请求头部的date字段记录请求发起的时间,在http请求头部的authorization字段保存请求身份验证信息,authorization字段中包含用于名及对请求资源信息的签名。格式为“iossusername:signature”,其中的username和signature为实际值,ioss为格式固定的值。

http请求头部的date字段记录请求发起的时间具体为,对象存储服务端设定一个时间差值,请求与服务端时间差超过时间差值则认为请求无效,date字段的值使用gmt时间。

生成http请求签名(signature)的规则为,因为服务端验证时需要根据请求生成签名以完成身份验证,所以都是请求中已包含或通过请求的内容可以获取到的信息,因为稍有不同即会造成哈希值的不同,故需要严格定义生成规则。

hmac计算所涉及的请求的参数必须包含了该请求的关键信息(用户密钥、http方法(post/get/delete/put/head等)、资源(/,/bucket,/bucket/object)、请求头数据(以x-ioss-开头的请求头)、请求url参数)。

authorization="ioss"+accesskey+":"+signature

signature=base64(hmac-sha1(secret,

httpmethod+"\n"

+content-md5+"\n"

+content-type+"\n"

+date+"\n"

+iossheaders

+resource))

上述标识中,签名字符串必须为utf-8格式。签名字符串即httpmethod所在的字符串。

accesskey表示用户名。

secret表示用户密钥。

httpmethod标识http请求的方法,为http协议定义的post,get,put等,大写表示。

content-md5表示http请求的实体部分的内容的md5码的base64编码,值可以为空,保留换行符。可以由该md5码来验证http请求内容是否被篡改。

content-type表示http请求内容的类型,值也可以为空,保留换行符。

date是请求的时间,gmt格式。

iossheaders是请求头中以x-ioss开头的head。head域名为小写,以域名字典顺序升序排列。去掉分隔符前后的空格。每个head后有换行符。

resource定义了要访问的对象存储的资源和子资源,即bucket和对象,和参数。完整的格式是/bucketname/objectname?param&pm1=val1&pm2=val2。如果没有对象名(例如创建、删除bucket操作),则为/bucketname/。如果也没有bucketname,则为/。在请求中定义了一些子资源,如acl,metadata等,用于扩展支持http请求的内容。所有子资源以字典序升序排列,附加到url参数后面。

通过网页url发起的调用,发起请求的用户、时间和签名通过请求参数进行传递。格式为http://abc?username=??&expires=??&signature=??。这里username参数为请求用户名。expires为请求的过期时间(因为url链接可能会发布出去,不能限制请求时间,而是限制此url截止到某个日期前有效)。expires为unix时间戳。signature为签名信息,生成方式与http客户端请求方式类似。

通过http客户端发起的调用和通过网页url发起的调用都传递了请求的用户、请求的时间或过期时间以及签名和数据传递的方式。在使用中的签名将hmac算法计算值经过base编码生成的。

生成在页面url链接中使用的签名与生成http请求签名(signature)的规则基本相同,只需要将date替换为expires(unix时间戳)即可。

以上所述的实施例,只是本发明较优选的具体实施方式,本领域的技术人员在本发明技术方案范围内进行的通常变化和替换都应包含在本发明的保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1