Azure Table Storage 通过 javascript 对 REST 调用进行身份验证
Azure Table Storage Authenticate REST call through javascript
我正在尝试使用javascript对我的Azure表进行REST调用,但我发现很难对调用进行身份验证。
我正在使用那段 javascript(我知道日期最多必须有 15 分钟,我不打算在 javascript 中使用实际键!
$(document).ready(function(){
$("button").click(function(){
var dateTimeInUtc = 'Fri, 12 Feb 2016 12:14:00 GMT';
var version = '2015-04-05';
var key = 'JEwMjqFD1ng8vIaECmRw8eQysiIvH08nF/jPKPYaNGumgxtKIjltX8bte5sKN6SNyw09s=='; // not an actuall key
var stringToSign = 'GET'n'n'nFri, 12 Feb 2016 12:14:00 GMT'n/myaccount/mytable(PartitionKey=''first_partition'', RowKey=''1235'')';
var signature = CryptoJS.enc.Base64.stringify(CryptoJS.HmacSHA256(CryptoJS.enc.Utf8.parse(stringToSign), CryptoJS.enc.Base64.parse(key)));
$.ajax({
url:'https://myaccount.table.core.windows.net/mytable(PartitionKey=''first_partition'', RowKey=''1235'')',
type: 'GET',
success: function (data) {
console.log('well done');
},
beforeSend: function (xhr) {
xhr.setRequestHeader('Authorization', "SharedKey " + "myaccount" + ":" + signature);
xhr.setRequestHeader('x-ms-date', dateTimeInUtc);
xhr.setRequestHeader('x-ms-version', version);
},
error: function (rcvData) {
console.log(rcvData);
}
});
});
});
我得到什么
403 (Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.)
你看出有什么明显的问题吗?我是否错过了签名中的某些内容?
您构造的字符串到签名必须是通过网络传输的确切 URL,包括 URL 中不允许的百分比编码字符。在这种情况下,URL 中的空格字符将通过线路进行百分比编码,因此必须在字符串到签名中对其进行百分比编码。
从 MSDN 页面:
从资源的 URI 派生的 CanonicalizedResource 字符串的任何部分都应完全按照它在 URI 中的编码方式进行编码。
根据documentation for creating authorization header
,创建要签名的字符串:
- 以空字符串 (") 开头,附加一个正斜杠 (/),后跟拥有该资源的帐户的名称 访问。
- 追加资源的编码 URI 路径,不带任何查询参数。
- 在资源名称后附加换行符 (')。
但是,在您的代码中,您没有包含应该包含(PartitionKey=''first_partition'', RowKey=''1235'')
。
您可以尝试以下操作吗:
var stringToSign = 'GET'n'n'nFri, 12 Feb 2016 12:14:00 GMT'n/htirawdata/htirawdata(PartitionKey=''first_partition'', RowKey=''1235'')';
相关文章:
- Passport.js成功的身份验证根本没有调用
- 使用 feathersjs 通过简单的 rest 调用进行身份验证
- 如何使用 Javascript 对 SharePoint REST 调用进行身份验证
- 保留 Azure 移动服务的自定义 API 调用的用户身份验证
- 不调用的 Passportjs 是身份验证
- Google Plus api 调用未经身份验证
- 如何使用基本身份验证从 angularjs 调用 rest 服务
- Azure Table Storage 通过 javascript 对 REST 调用进行身份验证
- 护照.js身份验证成功,未调用 next()
- 如何使用 JavaScript 调用 HTTPS 身份验证
- 使用HTTP基本身份验证的JQuery Ajax调用
- 对passportjs+Node.js+Express.js Rest API调用成功身份验证和失败的路由处理程序
- 身份验证-$http'调用了s.then()成功回调,而不是错误回调
- 推送器:“;未捕获的类型错误:无法调用方法'scopedTo'未定义的“;进行身份验证时
- 在MVC控制器和JavaScript Ajax调用之间需要身份验证
- 使用activedirectory身份验证在JavaScript中调用Azure API应用程序
- 在调用REST端点之前进行身份验证
- 对服务帐户进行身份验证,以便使用JavaScript客户端库调用Google API
- 为使用Azure Active Directory身份验证保护的Web API的AJAX调用添加身份验证令牌
- 使用Angular服务的请求拦截器对REST get调用进行简单的身份验证