Aru*_*run 2 android amazon-iam amazon-cognito aws-iot
我正在创建一个使用Amazon Cognito身份验证连接到AWS IoT的android应用程序。我能够成功验证用户身份,并且能够获得凭据。使用这些凭据更新事物影子时,始终返回403禁止的异常。我已经尝试了所有方法来解决此问题,但没有找到解决方案。
我的IAM政策是:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:GetThingShadow",
"iot:UpdateThingShadow",
],
"Resource": [
"arn:aws:iot:us-west-2:<my_account>:thing/mythingname"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
用于连接端点的Android代码:
userSession= AppHelper.getCurrSession();
credentialsProvider=new CognitoCachingCredentialsProvider(getApplicationContext(),POOL_ID,REGIONS);
Map<String,String> logins=new HashMap<String, String>();
logins.put("cognito-idp.us-west-2.amazonaws.com/user_pool_id",userSession.getIdToken().getJWTToken());
credentialsProvider.setLogins(logins);
iotDataClient=new AWSIotDataClient(credentialsProvider);
iotDataClient.setEndpoint(ENDPOINT);
Run Code Online (Sandbox Code Playgroud)
更新事物阴影:
UpdateThingShadowRequest request=new UpdateThingShadowRequest();
request.setThingName(thingName);
ByteBuffer payloadBuffer=ByteBuffer.wrap(updateState.getBytes());
request.setPayload(payloadBuffer);
UpdateThingShadowResult result=iotDataClient.updateThingShadow(request);
Run Code Online (Sandbox Code Playgroud)
在这方面的任何帮助将不胜感激。
我和你有同样的问题。我找到了解决方案。
403状态代码表示您需要授权。
如果您阅读本文档(接近尾声):发布/订阅策略示例,则表明您需要2条策略才能使其与Authenticated Cognito User一起使用。一个用于Cognito身份池,另一个用于Cognito用户。
无法通过用户界面将策略附加到认知用户,但是您可以通过CLI来执行。
将策略附加到认知用户的命令是:
aws iot attach-principal-policy --principal "cognito user id" --policy-Name "policy name"
您可以在以下位置找到您的Cognito用户ID:
Cognito > Manager Federated Identities > choose your identity pool > identity browser > and find your identity ID
我将此政策用于测试目的。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"iot:*"
],
"Resource": [
"*"
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
为了使其可重用,您需要使用lambda函数(在JavaScript中为此处)。
var AWS = require('aws-sdk');
var iot = new AWS.Iot();
exports.handler = function(event, context, cb) {
var params = {
policyName: 'your policy',
principal: 'your cognito id'
};
var out = iot.attachPrincipalPolicy(params, function(err, data) {
if (err) cb(err);
else cb(null, data);
});
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1864 次 |
| 最近记录: |