android - 使用 AWS Amplify 和 Android 通过 Cognito 对 REST API 进行身份验证
问题描述
我目前正在尝试配置使用 AWS Amplify 添加的 REST API。我已经配置了用户身份验证,用户可以按照身份验证文档中概述的步骤进行注册和登录。然后我使用api 步骤添加了一个 REST API 。
目前,我只是想从 DynamoDB 中检索项目列表。当我在 aws 控制台上对其进行测试时,该 api 成功,但是,当我从我的 android api 进行调用时,它返回以下错误:
{"message":"Authorization header requires 'Credential' parameter. Authorization header requires 'Signature' parameter. Authorization header requires 'SignedHeaders' parameter. Authorization header requires existence of either a 'X-Amz-Date' or a 'Date' header. Authorization=[a long string of characters]
我了解 amplify 会自动将 API 设置为使用 AWS_IAM 进行限制,我认为这就是返回上述消息的原因。我正在尝试使用我之前通过身份验证步骤设置的用户池对其进行身份验证。在我的 android 应用程序中调用 API 的代码如下:
RestOptions options = new RestOptions("/models");
Amplify.API.get("modelsapi", options, new ResultListener<RestResponse>() {
@Override
public void onResult(RestResponse restResponse) {
Log.i(TAG, restResponse.toString());
Log.i(TAG, restResponse.getData().asString());
}
@Override
public void onError(Throwable throwable) {
Log.e(TAG, throwable.toString());
}
});
我需要在 AWS api 控制台上设置授权人吗?如果是这样,我如何通过用户令牌传递授权标头。我看到一些使用 react native 但不使用 android 的人的回复:AWS-amplify 在请求中包括 cognito Authorization 标头
如果需要,Api 调用的函数如下:
app.get(path, function(req, res) {
let queryParams = {
TableName: tableName
}
dynamodb.scan(queryParams, (err, data) => {
if (err) {
res.statusCode = 500;
res.json({error: 'Could not load items: ' + err});
} else {
res.json(data.Items);
}
});
});
任何积分/帮助将不胜感激!谢谢!
解决方案
已经想通了。尽管 Amplify 旨在在进行 API 调用时自动获取凭据,但它似乎还是抛出了未经授权的错误。当我使用控制台进行测试时,它运行良好。我必须手动将授权标头添加到 Rest 选项:
RestOptions options = RestOptions.builder()
.addPath("models")
.addHeader("Authorization", token.getTokenString())
.build();
推荐阅读
- c# - 发布包含 jpg 和 json 的多部分请求会导致内部服务器错误和 IIS 上的 win32 状态 64
- python - 用 Selenium 抓取 Amazon - XPath 问题
- assembly - 解释师算子组装
- python - 无法从输入字段中获取整数值
- html - 当特定字符串存在部分工作时突出显示 HTML 正文?
- python - 将 Entry Tkinter 框保存到文本文件
- javascript - 我的应用不想重新渲染,但是上下文中的列表确实
- reactjs - 即使验证模式报告错误,Formik 的“isValid”也报告为真
- c++ - MS Visual Studio 2015。“构建解决方案”失败。但是“对解决方案运行代码分析”有效。?
- javascript - JavaScript (ReactJS) 比较两个对象