- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 Cosmos DB RestAPI 列出本地(模拟器)实例上的数据库,但进展不够。有谁知道我在这里做错了什么......
var crypto = require("crypto");
var request = require('request');
function getAuthorizationTokenUsingMasterKey(verb, resourceType, resourceId, date, masterKey) {
var key = new Buffer(masterKey, "base64");
var text = (verb || "").toLowerCase() + "\n" +
(resourceType || "").toLowerCase() + "\n" +
(resourceId || "") + "\n" +
date.toLowerCase() + "\n" +
"" + "\n";
var body = new Buffer(text, "utf8");
var signature = crypto.createHmac("sha256", key).update(body).digest("base64");
var MasterToken = "master";
var TokenVersion = "1.0";
return encodeURIComponent("type=" + MasterToken + "&ver=" + TokenVersion + "&sig=" + signature);
}
function doTest() {
const key = getAuthorizationTokenUsingMasterKey("get","dbs","", "Fri, 5 Jan 2018 04:31:00 GMT", "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==")
console.log(key);
var headers = {}
headers['content-length'] = body.length;
headers['authorization'] = key
headers["x-ms-version"] = "2017-02-22"
headers["x-ms-date"] = "2018-01-05T04:31:00Z"
request({method : "get", "url": "https://localhost:8081/dbs", "headers": headers, "body": body}, function (error, response, body) {
console.log("Error is : " + JSON.stringify(error));
console.log("Response is " + JSON.stringify(response, null, 2));
console.log("body is " + JSON.stringify(body))
});
}
doTest();
当我针对 Cosmos DB 模拟器运行此命令时,我得到以下输出..
G:\Node-8\NodeExample\node_modules\oracle-movie-ticket-demo>node cosmosTest
类型%3Dmaster%26ver%3D1.0%26sig%3DKvaXXxoeUpN6QuKz%2BA1w91EWHSdo0RdBjtI46tDBrgY%3D
Error is : null
Response is {
"statusCode": 401,
"body": "{\"code\":\"Unauthorized\",\"message\":\"The input authorization token can't serve the request. Please check that the expected payload is built as per the protocol, and check the key being used. Server used the following payload to sign: 'get\\ndbs\\n\\n2018-01-05t04:31:00z\\n\\n'\\r\\nActivityId: 0a00a781-f393-41e5-8ac0-4526af9110cc, Microsoft.Azure.Documents.Common/1.19.102.5\"}",
"headers": {
"transfer-encoding": "chunked",
"content-type": "application/json",
"content-location": "https://localhost:8081/dbs",
"server": "Microsoft-HTTPAPI/2.0",
"x-ms-activity-id": "0a00a781-f393-41e5-8ac0-4526af9110cc",
"x-ms-gatewayversion": "version=1.19.102.5",
"date": "Fri, 05 Jan 2018 04:31:37 GMT",
"connection": "close"
},
"request": {
"uri": {
"protocol": "https:",
"slashes": true,
"auth": null,
"host": "localhost:8081",
"port": "8081",
"hostname": "localhost",
"hash": null,
"search": null,
"query": null,
"pathname": "/dbs",
"path": "/dbs",
"href": "https://localhost:8081/dbs"
},
"method": "get",
"headers": {
"content-length": 0,
"authorization": "type%3Dmaster%26ver%3D1.0%26sig%3DKvaXXxoeUpN6QuKz%2BA1w91EWHSdo0RdBjtI46tDBrgY%3D",
"x-ms-version": "2017-02-22",
"x-ms-date": "2018-01-05T04:31:00Z"
}
}
}
body is "{\"code\":\"Unauthorized\",\"message\":\"The input authorization token can't serve the request. Please check that the expected payload is built as per the protocol, and check the key being used. Server used the following payload to sign: 'get\\ndbs\\n\\n2018-01-05t04:31:00z\\n\\n'\\r\\nActivityId: 0a00a781-f393-41e5-8ac0-4526af9110cc, Microsoft.Azure.Documents.Common/1.19.102.5\"}"
最佳答案
我不太熟悉 Node.js 代码,因此我尝试使用下面的 java 代码通过 REST API 访问 Azure Cosmos 模拟器。它对我来说效果很好。
import com.sun.org.apache.xml.internal.security.utils.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.TimeZone;
public class ListDataBaseRest {
private static final String key = "C2y6yDjf5/R+ob0N8A7Cgv30VRDJIWEHLM+4QDU5DE2nQ9nDuVTqobD4b8mGGyPMbIZnqyMsEcaGQy67XIw/Jw==";
public static void main(String args[]) throws Exception {
String urlString = "https://localhost:8081/dbs";
HttpURLConnection connection = (HttpURLConnection) (new URL(urlString)).openConnection();
getFileRequest(connection, key);
connection.connect();
System.out.println("Response message : " + connection.getResponseMessage());
System.out.println("Response code : " + connection.getResponseCode());
BufferedReader br = null;
if (connection.getResponseCode() != 200) {
br = new BufferedReader(new InputStreamReader((connection.getErrorStream())));
} else {
br = new BufferedReader(new InputStreamReader((connection.getInputStream())));
}
System.out.println("Response body : " + br.readLine());
}
public static void getFileRequest(HttpURLConnection request, String key)
throws Exception {
SimpleDateFormat fmt = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss");
fmt.setTimeZone(TimeZone.getTimeZone("GMT"));
String date = fmt.format(Calendar.getInstance().getTime()) + " GMT";
String stringToSign = "GET".toLowerCase() + "\n"
+ "dbs".toLowerCase() + "\n"
+ "" + "\n"
+ date.toLowerCase() + "\n"
+ "" + "\n";
System.out.println("stringToSign : " + stringToSign);
String auth = getAuthenticationString(stringToSign);
request.setRequestMethod("GET");
request.setRequestProperty("x-ms-date", date);
request.setRequestProperty("x-ms-version", "2017-02-22");
request.setRequestProperty("Authorization", auth);
request.setRequestProperty("Content-Type", "application/query+json");
}
private static String getAuthenticationString(String stringToSign) throws Exception {
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(Base64.decode(key), "HmacSHA256"));
String authKey = new String(Base64.encode(mac.doFinal(stringToSign.getBytes("UTF-8"))));
System.out.println("authkey:" + authKey);
String auth = "type=master&ver=1.0&sig=" + authKey;
auth = URLEncoder.encode(auth);
System.out.println("authString:" + auth);
return auth;
}
}
输出结果:
Error code 401
The input authorization token can't serve the request. Please check that the expected payload is built as per the protocol, and check the key being used.
根据我的经验,上述错误与授权 header
生成有关。我试图找出代码之间的区别。我注意到您的 date
参数是 static ,没有获取当前时间。
此外,x-ms-date
header 的格式不符合标准。它需要类似于 Tue, 01 Nov 1994 08:12:31 GMT
。
如有任何疑问,请告诉我。
关于javascript - 带模拟器的 Cosmos DB REST API(目前),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48107451/
我们是 COSMOS 新手,正在将多个应用程序迁移到云端。如果我们每个 COSMOS 实例只有一个数据库,或者所有应用程序数据库都在单个 COSMOS 实例中,那么这会具有哪些优点和缺点,这是否具有成
我有一个带有几个数据库的 Azure Cosmos 数据库,并且想要创建一个 Cosmos 服务帐户的副本(具有相同的 API/数据库),但没有数据,如何实现此目的? 克隆 Cosmos 服务帐户。”
我正在尝试使用 Azure Cosmos DB Data Migration Tool ,但无法连接到我的数据库。 在文档中指出 - The format of the Azure Cosmos DB
目标 使用 C#、.NET Core 2.2 将超过 100 万个文档导入 Azure Cosmos DB。 我尝试过的 我正在使用 Azure Cosmos Bulk Executor 库。我在这里
Microsoft 在 C#/.NET 中提供了两种使用 cosmos dbs 的方法。 可以使用 Entity Framework(EF) Core,它在后台使用 Cosmos SDK,并允许您将
宇宙Java SDK com.azure azure-cosmos 4.1.0 我们希望在将 POJO 序列化为 JSON 时使用自定义日期格式,目前它仅转换为 long。
CosmosDb 提供商正在发送此消息: “响应状态代码不表示成功:503 子状态:0 原因:(请求失败,因为客户端无法与跨 1 个区域的 3 个端点建立连接。请检查客户端资源匮乏问题并验证连接客户端
我正在尝试通过启用服务器端分页来从 Cosmos DB 获取数据。我有两个选择: 使用 EF Core Azure Cosmos DB 提供程序 var query = DbContext.Order
我已经下载了 Azure Cosmos DB Data Migration Tool从这里。我正在将 Sql 数据迁移到 Cosmos DB。使用迁移工具时。 Source Information 我
我有一个 Azure 函数,使用用 Python 编写的 Cosmos DB 触发器,该触发器具有与 Cosmos DB 的 IN 和 OUT 绑定(bind),因此当容器中更新文档时,我会在另一个容
我可以在 azure cosmos-db explore 中运行查询,如下图所示,并将响应视为 json 数组 我想使用 Java 和 azure-cosmos SDK 来执行相同的操作 下面是我的函
我需要运行聚合查询来计算记录数,例如从 Product_Ratings r 分组中选择 r.product_id、r.Rating、COUNT(1) 个 R.product_id、r.Rating。该
我找到了2个官方包 Microsoft.Azure.DocumentDB.Core This client library enables client applications targeting
我找到了2个官方包 Microsoft.Azure.DocumentDB.Core This client library enables client applications targeting
我正在尝试将包含 JSON 列表的 JSON 文件从 .Net 4.6.1 控制台应用程序批量导入到 Azure Cosmos DB。 我能够成功地创建数据库和容器。但是,我在第 40 行收到以下错误
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我想监视来 self 的应用程序的一些事件。 一种选择是将数据发送到 Azure 事件中心并使用流分析进行一些后处理并将数据输入到 cosmos db 中。 另一个选项是从应用程序存储到 cosmos
我想监视来 self 的应用程序的一些事件。 一种选择是将数据发送到 Azure 事件中心并使用流分析进行一些后处理并将数据输入到 cosmos db 中。 另一个选项是从应用程序存储到 cosmos
从 Udemy 类(class)获得了 .Net 代码并在我的本地运行。编写了一个连接到 Azure Cosmos DB 并创建项目的 Azure 函数。但无法连接到 Azure Cosmos DB。
我在尝试将它们与 .NET Core 3.1 一起使用的所有这些包之间迷失了方向。 我正在使用 Azure.Cosmos 和 Azure.Storage.Blob,但我不确定是否需要使用 Micros
我是一名优秀的程序员,十分优秀!