Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/466.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法从客户端JavaScript调用需要加密身份验证的Rest API?_Javascript_Restapi - Fatal编程技术网

无法从客户端JavaScript调用需要加密身份验证的Rest API?

无法从客户端JavaScript调用需要加密身份验证的Rest API?,javascript,restapi,Javascript,Restapi,我正在尝试调用RESTAPI(逻辑监视器API),它需要来自客户端的令牌身份验证。但是身份验证需要签名,该签名由访问ID、基于API令牌访问密钥的base64编码HMAC签名和时间戳组成 参考: 我发现的唯一一个例子是导入Crypto和request等模块。由于我试图从客户端执行此操作,因此无法使用Node JS。我尝试使用javaScript库,比如Crypto JSCDN:,但没有成功 下面是我的Javascript代码: var accessId='12312'; var accessK

我正在尝试调用RESTAPI(逻辑监视器API),它需要来自客户端的令牌身份验证。但是身份验证需要签名,该签名由访问ID、基于API令牌访问密钥的base64编码HMAC签名和时间戳组成

参考:

我发现的唯一一个例子是导入Crypto和request等模块。由于我试图从客户端执行此操作,因此无法使用Node JS。我尝试使用javaScript库,比如
Crypto JS
CDN:,但没有成功

下面是我的Javascript代码:

var accessId='12312';
var accessKey='12324566767';
变量公司='api'
//请求详细信息
var httpVerb=“GET”;
var epoch=(新日期).getTime();
var resourcePath=“/device/groups”;
//构造签名
var requestVars=httpVerb+epoch+resourcePath;
var hash=CryptoJS.HmacSHA256(requestVars,accessKey);
var签名=btoa(散列);
var auth=“LMv1”+accessId+:“+signature+”:“+epoch;
console.log(auth);
$.ajax({
url:'https://'+company+'.logicmonitor.com/santaba/rest'+resourcePath,
标题:{
“内容类型”:“应用程序/json”,
“授权”:授权
},
键入:“获取”,
数据类型:“json”,
数据:{},
成功:功能(结果){
控制台日志(结果);
},
错误:函数(错误){
console.log(错误);
}

});这是否回答了您的问题。请参阅。除此之外,您还可以拥有自己的微服务(充当该API的代理),以避免向客户端披露访问凭据(这不是hmacSHA256的问题)。您的示例无效,因为它生成了
auth
,但从未将其设置为
Authorization
标题。您好@MartinZeitler,谢谢您的回复。在你推荐给我的问题的javascript回答中,我仍在试图弄清楚hash_func是什么。请看一下我在问题中提供的更新。