gpt4 book ai didi

AngularJS:通过 Websocket 发送身份验证 header

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:21 24 4
gpt4 key购买 nike

我在验证对 WebSocket API 的请求时遇到困难。

我正在使用的网站 (www.bitmex.com) 提供 REST API 和 WebSocket API。

它们的两个 API 都允许使用 API key 进行身份验证。

身份验证要求

API 提供以下用于使用 API key 进行身份验证的文档:

    Authentication is done by sending the following HTTP headers:

api-expires: a UNIX timestamp in the future (eg: 5 seconds).
api-key: Your public API key. This the id param returned when you create an API Key via the API.
api-signature: A signature of the request you are making. It is calculated as hex(HMAC_SHA256(verb + url + nonce + data)).

REST API

我创建了一个用于向 REST API 发送请求的 NodeJS 模块,我定义了以下 header

    headers = {
"User-Agent": "BitMEX NodeJS API Client",
"api-expires": expires,
"api-key": this.api_key,
"api-signature": this.signMessage(verb, reqUrl, expires, params)
};

where the signMessage function looks like:

BitMEX.prototype.signMessage = function signMessage(verb, url, nonce, data) {
if (!data || _.isEmpty(data)) data = '';
else if(_.isObject(data)) data = formatParameters(data);

return crypto.createHmac('sha256', this.secret).update(verb + url + nonce + data).digest('hex');
};

这对于 REST API 非常有用,并且可以在应用程序的后端完成我需要它完成的所有操作。

WebSocket API

我正在尝试使用 WebSocket 获取实时数据并将其显示在基于浏览器的界面中。

网站上的文档指出:

To use an API Key with websockets, you must sign the initial upgrade request in the same manner you would sign other REST calls. 

我一直在使用 ng-websocket 模块在 AngularJS 中实现此功能。

    exchange.dataStream = $websocket('wss://testnet.bitmex.com/realtime');

exchange.dataStream.onMessage(function incoming (message) {
console.log("BitMEX: WS MESSAGE RECEIVED: " + message.data);

// .. handle data here ...

});

exchange.dataStream.send({"op":"getAccount"});

我遇到的问题是无论如何我都找不到使用身份验证所需的 ng-websocket 发送 header 。

如果我目前从浏览器中的另一个选项卡登录 BitMEX,这将连接、获取数据并按预期工作。

但是,如果我当前没有登录该网站,则会抛出以下错误:

    BitMEX: WS MESSAGE RECEIVED: {"status":401,"error":"Not authenticated.","meta":{},"request":{"op":"getAccount"}}

这里提供了一个Python示例:https://github.com/BitMEX/market-maker/blob/master/test/websocket-apikey-auth-test.py通过身份验证过程,但我还没有找到在 AngularJS 中完成此任务的方法。

摘要

#1) 登录 BitMEX 并且 Websocket 正在运行时,Chrome 是否会以某种方式使用网站的 cookie 来验证 Websocket 请求?

在这里查看 websocket 的概述:http://enterprisewebbook.com/ch8_websockets.html初始握手将连接从“HTTP”升级为 WebSocket 协议(protocol),

#2) 由于此初始连接是通过 HTTP 进行的,因此是否有任何方法可以附加此初始 HTTP 请求所需的 header ?

最佳答案

如果您阅读了 Python 示例,它发送的第一件事是 {"op": "authKey", "args": [API_KEY, nonce, signature]} 然后发送 {"op": "getAccount"}

Python 示例 line #44line #51

Chrome 如何做到这一点是另一个问题。

关于AngularJS:通过 Websocket 发送身份验证 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33769304/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com