在没有主密钥的情况下访问 Android 中的 Parse 服务器不会授予授权

Posted

技术标签:

【中文标题】在没有主密钥的情况下访问 Android 中的 Parse 服务器不会授予授权【英文标题】:Accessing the Parse server in Android without a master key doesn't give authorization 【发布时间】:2017-07-28 12:26:01 【问题描述】:

当我使用以下内容访问我的服务器时,它可以工作:

curl -X POST \
  -H "X-Parse-Application-Id: xxx" \
  -H "X-Parse-Master-Key: yyy" \
  -H "Content-Type: text/plain" \
  -d '"score":1337,"playerName":"Sean Plott","cheatMode":false' \
  http://xx.xx.xx.xx/parse/classes/Inventory

但是当我使用以下内容时,它不会:

curl -X POST \
  -H "X-Parse-Application-Id: xxx" \
  -H "Content-Type: text/plain" \
  -d '"score":1337,"playerName":"Sean Plott","cheatMode":false' \
  http://xx.xx.xx.xx/parse/classes/Inventory

我得到了这个错误:

"error":"unauthorized"

之前它工作得很好。我更改了一些设置并更新到最新的 Parse Server 版本,然后它停止工作,以及与之相关的所有其他应用程序。

网页版有效,表明 REST API 密钥没问题。我也可以通过仪表板完美地访问所有内容。唯一的问题是当我用android访问它时,它只能给出一个Application Id用于识别。

我是否更改了阻止此操作的错误设置?我认为我没有更改任何内容,尽管我没有关闭括号或在 server.js 文件中注释掉某些内容的可能性很小。

【问题讨论】:

您是否在 index.js 中添加了客户端密钥?当你初始化解析服务器?我知道当解析服务器启动时,他们将其设为可选(尽管推荐)。它不被认为是“秘密”,因为它可以从您的应用程序中反编译,但您绝对不应该将您的主密钥放入移动客户端。 看来我从代码中删除了所有clientKey,但问题仍然存在。 我建议使用客户端密钥。你的服务器是如何初始化的?有或没有客户端密钥?请向您显示已编辑的 index.js。 【参考方案1】:

这里提出来了:https://github.com/parse-community/parse-server

Parse 服务器不再需要与 Parse 一起使用的客户端密钥。如果您仍然需要它们,也许是为了能够拒绝访问旧客户端,您可以在初始化时设置密钥。设置这些键中的任何一个都将要求所有请求提供已配置的键之一。

客户端密钥 javascriptKey restAPIKey dotNetKey

发生的事情是我的配置文件中有restAPIKey,所以它也需要其他四个键中的任何一个。新的更新强制我的应用使用clientKey 或从配置中删除restAPIKey

【讨论】:

以上是关于在没有主密钥的情况下访问 Android 中的 Parse 服务器不会授予授权的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PHP 中没有硬编码密钥的情况下进行对称加密

如何在没有 Oauth 的情况下访问 Google 客户端 API(仅 API 密钥)

如何在不使用帐户密钥的情况下访问存储帐户 blob 容器?

在没有线程阻塞的情况下回调主线程(Java)

在没有 Firebase 的情况下管理 GCM 的 API 密钥?

AWS EC2如何在没有密钥的情况下连接?