使用 Azure 应用服务和 Intel Edison 的 GET 请求
GET request using Azure app services and Intel Edison
我想使用 REST API 从 azure 应用程序服务的简单表中读取数据到 Intel Edison。在我使用 Azure 移动服务做同样的事情之前,我的代码是这样的。 PS:我正在使用 Arduino IDE 对设备进行编程。
void send_request()
{
Serial.println("\nconnecting...");
if (client.connect(server, 80)) {
// POST URI
sprintf(buffer, "GET /tables/%s HTTP/1.1", table_name);
client.println(buffer);
// Host header
sprintf(buffer, "Host: %s", server);
client.println(buffer);
// Azure Mobile Services application key
sprintf(buffer, "X-ZUMO-APPLICATION: %s", ams_key);
client.println(buffer);
// JSON content type
client.println("Content-Type: application/json");
client.print("Content-Length: ");
client.println(strlen(buffer));
// End of headers
client.println();
// Request body
client.println(buffer);
}
else {
Serial.println("connection failed");
}
}
其中服务器名称是 "genesis-iot-control.azure-mobile.net";
但现在身份验证已更改,移动服务已被应用服务取代。我如何在 Intel Edison 上使用 REST API 访问它们?
我遵循了这个但没有解决方案。
感谢任何形式的帮助。
应用程序密钥机制已从移动应用程序中删除。
您需要 implement-your-own-header 检查。
更多内容请看这篇文章:
https://github.com/Azure/azure-mobile-apps-net-server/wiki/Implementing-Application-Key
本质上,您从 Edison 发送一个 X-YOUR-CUSTOM-HEADER: SeCreT=
并根据 Node/C# 移动应用程序后端代码中的应用程序设置(在门户中定义)检查其值。
是的,他们应该保留旧机制,默认情况下将其禁用,但允许我们通过应用程序设置将其重新打开。
另一种方法是从 Azure AD 获取 Bearer token 并将其与 Authorization: Bearer ToKen=
一起使用(但无论如何它最终都会过期,除非你也注意刷新它),或构建另一个 Web 应用程序(或当前应用程序中的 API 端点),您将秘密发送到该应用程序,然后发送到 Azure AD 并向您提供 Bearer 令牌。
或者,如果您真的想度过一个非常有趣的下午,请跳 Edison 的 OAuth 舞蹈!
curl
样本在这里:
https://ahmetalpbalkan.com/blog/azure-rest-api-with-oauth2/
对于微型 2KB 内存设备(如 Arduino Uno),在内存中存储 Bearer token 和 refresh token 已经是游戏结束了。
我很想知道是否有人有 better/more efficient/more 安全的方法来使用移动应用程序从微控制器进行身份验证。
示例 - 使用 X-SECRET 作为您的自定义身份验证 header:
// Todoitem.js
var azureMobileApps = require('azure-mobile-apps');
// Create a new table definition
var table = azureMobileApps.table();
// Execute only if x-secret header matches our secret
table.read(function (context) {
// All header names are in lowercase in context.req.headers
console.info('Got x-secret header with value: ' +
context.req.headers['x-secret']);
if (context.req.headers['x-secret'] == process.env.SECRET) {
console.info('Secret matches value in App Settings.');
return context.execute();
}
});
// Removed CREATE, UPDATE, DELETE definitions for brevity.
// YOU NEED TO PROTECT THOSE METHODS AS WELL!
// Finally, export the table to the Azure Mobile Apps SDK - it can be
// read using the azureMobileApps.tables.import(path) method
module.exports = table;
从 curl
中看到的行为(不用说你应该使用 HTTPS 如果你的 Edison 可以做到这一点):
$ curl -s -i http://{mobileapp}.azurewebsites.net/tables/todoitem \
-H "ZUMO-API-VERSION: 2.0.0"
HTTP/1.1 404 Not Found
...
X-Powered-By: Express
{"error":"The item does not exist"}
$ curl -s -i http://{mobileapp}.azurewebsites.net/tables/todoitem \
-H "ZUMO-API-VERSION: 2.0.0" \
-H "X-SECRET: SeCr3T="
HTTP/1.1 200 OK
...
X-Powered-By: Express
[
{
"id": "40b996d6-ec7f-4188-a310-0f02808e7093",
"createdAt": "2016-08-31T11:30:11.955Z",
...
"Yo_node":"Sup"
}
]
使用应用服务编辑器(摩纳哥/Visual Studio在线编辑器)编码和检查输出 - https://{mobileapp}。scm.azurewebsites.net/dev
我想使用 REST API 从 azure 应用程序服务的简单表中读取数据到 Intel Edison。在我使用 Azure 移动服务做同样的事情之前,我的代码是这样的。 PS:我正在使用 Arduino IDE 对设备进行编程。
void send_request()
{
Serial.println("\nconnecting...");
if (client.connect(server, 80)) {
// POST URI
sprintf(buffer, "GET /tables/%s HTTP/1.1", table_name);
client.println(buffer);
// Host header
sprintf(buffer, "Host: %s", server);
client.println(buffer);
// Azure Mobile Services application key
sprintf(buffer, "X-ZUMO-APPLICATION: %s", ams_key);
client.println(buffer);
// JSON content type
client.println("Content-Type: application/json");
client.print("Content-Length: ");
client.println(strlen(buffer));
// End of headers
client.println();
// Request body
client.println(buffer);
}
else {
Serial.println("connection failed");
}
}
其中服务器名称是 "genesis-iot-control.azure-mobile.net";
但现在身份验证已更改,移动服务已被应用服务取代。我如何在 Intel Edison 上使用 REST API 访问它们?
我遵循了这个
感谢任何形式的帮助。
应用程序密钥机制已从移动应用程序中删除。 您需要 implement-your-own-header 检查。
更多内容请看这篇文章:
https://github.com/Azure/azure-mobile-apps-net-server/wiki/Implementing-Application-Key
本质上,您从 Edison 发送一个 X-YOUR-CUSTOM-HEADER: SeCreT=
并根据 Node/C# 移动应用程序后端代码中的应用程序设置(在门户中定义)检查其值。
是的,他们应该保留旧机制,默认情况下将其禁用,但允许我们通过应用程序设置将其重新打开。
另一种方法是从 Azure AD 获取 Bearer token 并将其与 Authorization: Bearer ToKen=
一起使用(但无论如何它最终都会过期,除非你也注意刷新它),或构建另一个 Web 应用程序(或当前应用程序中的 API 端点),您将秘密发送到该应用程序,然后发送到 Azure AD 并向您提供 Bearer 令牌。
或者,如果您真的想度过一个非常有趣的下午,请跳 Edison 的 OAuth 舞蹈!
curl
样本在这里:
https://ahmetalpbalkan.com/blog/azure-rest-api-with-oauth2/
对于微型 2KB 内存设备(如 Arduino Uno),在内存中存储 Bearer token 和 refresh token 已经是游戏结束了。
我很想知道是否有人有 better/more efficient/more 安全的方法来使用移动应用程序从微控制器进行身份验证。
示例 - 使用 X-SECRET 作为您的自定义身份验证 header:
// Todoitem.js
var azureMobileApps = require('azure-mobile-apps');
// Create a new table definition
var table = azureMobileApps.table();
// Execute only if x-secret header matches our secret
table.read(function (context) {
// All header names are in lowercase in context.req.headers
console.info('Got x-secret header with value: ' +
context.req.headers['x-secret']);
if (context.req.headers['x-secret'] == process.env.SECRET) {
console.info('Secret matches value in App Settings.');
return context.execute();
}
});
// Removed CREATE, UPDATE, DELETE definitions for brevity.
// YOU NEED TO PROTECT THOSE METHODS AS WELL!
// Finally, export the table to the Azure Mobile Apps SDK - it can be
// read using the azureMobileApps.tables.import(path) method
module.exports = table;
从 curl
中看到的行为(不用说你应该使用 HTTPS 如果你的 Edison 可以做到这一点):
$ curl -s -i http://{mobileapp}.azurewebsites.net/tables/todoitem \
-H "ZUMO-API-VERSION: 2.0.0"
HTTP/1.1 404 Not Found
...
X-Powered-By: Express
{"error":"The item does not exist"}
$ curl -s -i http://{mobileapp}.azurewebsites.net/tables/todoitem \
-H "ZUMO-API-VERSION: 2.0.0" \
-H "X-SECRET: SeCr3T="
HTTP/1.1 200 OK
...
X-Powered-By: Express
[
{
"id": "40b996d6-ec7f-4188-a310-0f02808e7093",
"createdAt": "2016-08-31T11:30:11.955Z",
...
"Yo_node":"Sup"
}
]
使用应用服务编辑器(摩纳哥/Visual Studio在线编辑器)编码和检查输出 - https://{mobileapp}。scm.azurewebsites.net/dev