我有一个Azure App Services服务,其中包含许多Easy Table。我从一个完全独立的服务器上运行的node.js应用程序访问这些Easy Tables 外部中的数据。
我可以仅使用格式为https://[app service name].azure-mobile.net/tables/${table-name}?${odata-query}
的基本http请求来访问表格,我也可以使用post
和patch
请求来添加/更改表格中的行。
但是,我只能对已明确设置为无身份验证的表格执行上述操作 - 我已将权限设置为 everyone
。显然这并不理想。如何向服务器发出对Only authenticated users
或Anybody with the application key
权限级别有效的请求?我对这些选项中的任何一个都很好,宁愿使用更容易的选项。
答案 0 :(得分:0)
在Easy Tables下,您可以编辑Node.js后端。此Node.js后端的SDK位于GitHub仓库中 - https://github.com/azure/azure-mobile-apps-node。
该回购中有许多样本。其中一个是API密钥:https://github.com/Azure/azure-mobile-apps-node/tree/master/samples/api-key
您还可以实施Azure应用服务身份验证,该身份验证允许您创建客户端API。您需要生成一个ZUMO令牌,可能在自定义API中,然后将ZUMO令牌作为X-ZUMO-AUTH头传递。这允许您使用经过身份验证的' Easy Tables中的选项。
您可以使用其中一种或两种技术。
答案 1 :(得分:0)
tldr使用"X-ZUMO-APPLICATION"
作为http标头
我找到了自己问题的答案。我想我没有给@adrian-hall足够的信息给我最能满足我的答案,所以我在这里给出一些背景:
我开始使用Azure移动服务,然后才迁移到Azure应用服务,而我主要在一组Windows应用商店应用的上下文中使用Easy Tables。最初,我的Easy Tables被设置为“使用应用程序密钥的任何人”,并且为了使用我的应用程序中的表,我得到了一些代码,以及一个MobileServiceClient Nuget包:
var client = new window.WindowsAzure.MobileServiceClient(
"https://[my service name].azure-mobile.net/",
"[application key]"
);
后来,我在同一个应用服务上创建了一些表,我想通过http访问,而不是在我的Windows应用商店应用中,但我无法弄清楚如何使用应用程序密钥进行身份验证,所以我有为每个人设置权限'。但显然这是非常讨厌的 - 任何发现网址和表名的人都可以从我拥有该权限级别的任何表中读取,写入和删除行!
但我现在已经有了几个月的设置,没有任何障碍 - 我想我的生意并不是黑客或其他什么的有趣目标。
但我决定我想要更多安全性,我想用只是应用程序密钥进行身份验证,这样我就不必更改任何现有的应用程序。
我开始在我的Windows应用商店应用中搜索Nuget Package for MobileServiceClient,发现MobileServiceClient
对象有一个withFilter
方法,我可以给它一个回调,以便我可以看到请求在它出去之前。我设法找到了请求,以便我可以查看网址和标题以查看身份验证详细信息,结果发现它只是一个简单的标题:"X-ZUMO-APPLICATION": '[application key]'
。只是使用它是我的完美解决方案。现在,我可以将所有表格设置为“使用应用程序密钥的任何人”。而不是每个人'只是有一点额外的安全性。 HTTPS标头已加密,因此对我来说足够安全。