OTS的请求和应答是使用HTTP协议进行传递的。Request签名仅支持URI(Uniform Resource Identifier)签名一种方式,用户在任何一个Request中必须包含6个参数:APIVersion,Date,OTSAccessKeyId, SignatureMethod, SignatureVersion, Signature。
Request中的APIVersion表示目前OTS API的版本,其值只能是1。
Date参数有3种可选的形式:
1. %a, %d %b %Y %H:%M:%S GMT (如:Mon, 3 Jan 2010 08:33:47 GMT)
2. %A, %d-%b-%y %H:%M:%S GMT (如:Monday, 3-Jan-10 08:33:47 GMT)
3. %a %b %d %H:%M:%S %Y(如:Mon Jan 3 08:33:47 2010)
这些时间传递的都是UTC时间。
Date所表示的时间与服务器接收到request的时间最大误差为15分钟。如果超过15分钟的时间误差则服务器端报错:OTSAuthFailed。
OTSAccessKeyId就是OTS提供的AccessID。
SignatureMethod表示计算签名的算法,目前只支持值为HmacSHA1这一种。
SignatureVersion表示计算签名算法的版本,目前只支持值为1的版本。
Signature即是对整个URL进行签名后的字符串。用于签名的字符串包括用户请求的资源名以及请求的参数。参数的名称和值经过URL encoding后,之间用’=’(等号)相隔,组成字符串并对参数名-值对按照字典序排序后,以’&’符号连接构成字符串。签名的计算方法如下:
Base64(hmac-sha1(VERB + “ ” + “KEY1=VALUE1” + “&” + “KEY2=VALUE2”, AccessKey
其中VERB表示请求的资源名,之后接参数的名称和值。
例如,用户的请求为:
http://service.ots.aliyun.com/CreateTable?TableName=CapTable&PK.1.Name=PrimaryKey1&PK.1.Type=STRING&PK.2.Name=PrimaryKey2&PK.2.Type=INTEGER&View.1.Name=View1&View.1.PK.1.Name=PrimaryKey1&View.1.PK.1.Type=STRING&View.1.PK.2.Name=Column1&View.1.PK.2.Type=BOOLEAN&View.1.Column.1.Name=Column2&View.1.Column.1.Type=STRING&View.1.Column.2.Name=Column3&View.1.Column.2.Type=DOUBLE&APIVersion=1&Date=Fri%2C%2016%20Sep%202006%2018%3A07%3A20%20GMT&OTSAccessKeyId=ID1&SignatureMethod=HmacSHA1&SignatureVersion=1
那么用于签名的字符串为:
“/CreateTable” + “” +“APIVersion=1” +“Date=Fri%2C%2016%20Sep%202006%2018%3A07%3A20%20GMT” +“&OTSAccessKeyId=ID1” +“&PK.1.Name=PrimaryKey1” +“&PK.1.Type=STRING” +“&PK.2.Name=PrimaryKey2” +“&PK.2.Type=INTEGER” +“&SignatureMethod=HmacSHA1” +“&SignatureVersion=1” +“&TableName=CapTable” +“&View.1.Column.1.Name=Column2” +“&View.1.Column.1.Type=STRING” +“&View.1.Column.2.Name=Column3” +“&View.1.Column.2.Type=DOUBLE” +“&View.1.Name=View1” +“&View.1.PK.1.Name=PrimaryKey1” +“&View.1.PK.1.Type=STRING” +“&View.1.PK.2.Name=Column1” +“&View.1.PK.2.Type=BOOLEAN”
最终传入的形式是(假设ID1对应的AccessKey为:KEY1,下面的签名字符串是用KEY1计算出来的):
http://service.ots.aliyun.com/CreateTable?TableName=CapTable&PK.1.Name=PrimaryKey1&PK.1.Type=STRING&PK.2.Name=PrimaryKey2&PK.2.Type=INTEGER&View.1.Name=View1&View.1.PK.1.Name=PrimaryKey1&View.1.PK.1.Type=STRING&View.1.PK.2.Name=Column1&View.1.PK.2.Type=BOOLEAN&View.1.Column.1.Name=Column2&View.1.Column.1.Type=STRING&View.1.Column.2.Name=Column3&View.1.Column.2.Type=DOUBLE&APIVersion=1&Date=Fri%2C%2016%20Sep%202006%2018%3A07%3A20%20GMT&OTSAccessKeyId=ID1&SignatureMethod=HmacSHA1&SignatureVersion=1&Signature=%2FL034xFZBPO%2BNpxA%2BSufMiOt%2BKQ%3D
返回结果:如果用户AccessId不存在,则返回403 Forbidden ?如果用户的签名校验失败,则返回403 Forbidden ? 如果没有传入必要的参数,则返回400 Bad Request ? 传入请求的时间必须在OTS服务器当前时间前后的15分钟内,否则返回403 Forbidden
[backcolor=transparent]
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在OTS(表格存储)的HTTP请求中,确保请求有效性和安全性需要遵循以下格式和规则:
APIVersion: 必须设置为1,指示当前OTS API版本。
Date:
%a, %d %b %Y %H:%M:%S GMT
(例如:Mon, 3 Jan 2010 08:33:47 GMT)%A, %d-%b-%y %H:%M:%S GMT
(例如:Monday, 3-Jan-10 08:33:47 GMT)%a %b %d %H:%M:%S %Y
(例如:Mon Jan 3 08:33:47 2010)OTSAuthFailed
。OTSAccessKeyId: 必填项,使用您的OTS AccessKey ID进行身份验证。
SignatureMethod: 固定值HmacSHA1
,指定签名算法为HMAC SHA1。
SignatureVersion: 同样固定为1,指明签名算法版本。
Signature: 签名字符串,通过对整个请求URL(包括资源名及参数)进行签名生成。具体步骤如下:
确保遵守这些规则可以正确构建请求并避免签名错误,保障与OTS服务之间的通信安全。