gpt4 book ai didi

android - 使用 AWS Amplify 和 Android 通过 Cognito 验证 REST API

转载 作者:行者123 更新时间:2023-12-05 00:16:19 25 4
gpt4 key购买 nike

我当前正在尝试配置使用 AWS Amplify 添加的 REST API。我已经配置了用户身份验证,用户可以按照 authentication docs 中概述的步骤进行注册和登录。 。然后,我使用 api steps 添加了 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 控制台上设置授权方吗?如果是这样,我如何通过用户 token 传递授权 header 。我看到一些使用 React Native 但不使用 Android 的人的回复:AWS-amplify Including the cognito Authorization header in the request

如果需要,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 调用时自动获取凭据,但它似乎还是会抛出未经授权的错误。当我使用控制台进行测试时,它运行良好。我必须手动将授权 header 添加到 Rest 选项中:

RestOptions options = RestOptions.builder()
.addPath("models")
.addHeader("Authorization", token.getTokenString())
.build();

关于android - 使用 AWS Amplify 和 Android 通过 Cognito 验证 REST API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60263497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com