【发布时间】:2016-05-23 19:31:56
【问题描述】:
我对亚马逊不太熟悉,所以有几个问题:
我想使用我自己的自定义后端解决方案通过 Cognito 为亚马逊上的用户执行登录。找到this 可能的解决方案。为我注册和登录后此后端返回
{
identityId = "eu-xxxx-x:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx";
login = 1;
token = "eyJraWQiOiJldS13ZXN0LTExIiwidHlwIjoiSldTIiwiYWxnIjoiUlM1MTIifQ.eyJzdWIiOiJldS13ZXN0LTE6NGFmNDdmMWItZDNmOC00NmZkLWI2MzEtZGE2OGU3ZmRmYzE1IiwiYXVkIjoiZXUtd2VzdC0xOjIwNjBiZDc3LWEwNDAtNGI4OC05MDU4LTczMGY3Y2RmNGQyZSIsImFtciI6WyJhdXRoZW50aWNhdGVkIiwibG9naW4ud3A0Lm15YXBwIiwibG9naW4ud3A0Lm15YXBwOmV1LXdlc3QtMToyMDYwYmQ3Ny1hMDQwLTRiODgtOTA1OC03MzBmN2NkZjRkMmU6a2lyaWxsLmdlQGdtYWlsLmNvbSJdLCJpc3MiOiJodHRwczovL2NvZ25pdG8taWRlbnRpdHkuYW1hem9uYXdzLmNvbSIsImV4cCI6MTQ1NTI5MDA5OSwiaWF0IjoxNDU1Mjg5MTk5fQ.FGnBUEQZ3wDENFNa_g29l2UhlIAklBnLdqpMomSE3_ayesNV1dqGyzAMQCvwyr4XdJpB3lI0KF-k3wc4t8BKPYg5QKrZ-q-aNkjwp34tHFMIr8vGw4vbZiKB6XnGMRghYSbPtuwwFG80ibZMAAXik4nld8sGxoQSrCjTubPKU4I9Mzi6lJQsDGAZxmm56E2lVSeBw2nZbE1iwRDhJf6hHJsKOLceDDtWoknRX3NHeNuoueNLS1JrbphD8wVqejxhEjrK-qucoUL_uj81GxYUkyONQtu-3B79epsXIsxvU_zW1MwVufFg5p5ID83F1Cic77QkzF2FJnEJIadEG6R_yw";
}
我想关注这个guide。但据此,我应该提供IdentityProviderName 和令牌并将其设置为在任何社交登录后:
credentialsProvider.logins = @{
@(AWSCognitoLoginProviderKeyFacebook): token
};
作为IdentityProviderName,我使用了在config.json中设置的名称
"DEVELOPER_PROVIDER_NAME": "<ProviderName>"
但我有一个例外,我没有任何提供者
AWSCognitoCredentialsProvider getCredentialsWithCognito:authenticated:]_block_invoke | GetCredentialsForIdentity 失败。错误是[错误 域=com.amazonaws.AWSCognitoIdentityErrorDomain 代码=8“(空)” UserInfo={__type=InvalidParameterException, message=请提供一个 有效的公共提供者}]
当我去 IAM 控制台创建 providerID 时,它要求我选择提供者的类型(OpenID 或 SAML)
所以我真的不明白我到底应该放什么?选择什么类型。
对于服务器,我使用 Lambda 服务和 DynamoDB 服务,对于网页,我使用 S3。
根据this流:
我已经完成了前 4 个步骤,并且我在 5 个步骤上堆叠,所以我只需将此数据发送到 Cognito(无需准备我的自定义开发提供程序,因为我已经有 idendityID 和令牌,这看起来不正确)。
结果
开发人员身份验证 - 仅适用于 lambda 的登录方法,但当我尝试使用 DynamoDB 时,用户未经过身份验证。
添加了所有角色 - 目前我为 Unath 用户添加临时角色
{
"Sid": "DynamoDBPolicy",
"Effect": "Allow",
"Action": [
"dynamodb:*"
],
"Resource": [
"*"
]
}
一切正常(呵呵),但不是很好
问题 - 如何使用从我放置在 Lambda 上的后端解决方案接收到的令牌来制作 Cognito DevAuth?我错过了什么吗?
更新
感谢@Rachit Dhall
AWSCognitoIdentity *cognitoIdentity = [AWSCognitoIdentity defaultCognitoIdentity];
AWSCognitoIdentityGetCredentialsForIdentityInput *input = [[AWSCognitoIdentityGetCredentialsForIdentityInput alloc] init];
input.identityId = [task.result valueForKey:@"identityId"];
input.logins = @{
@"cognito-identity.amazonaws.com" : [task.result valueForKey:@"token"]
};
[cognitoIdentity getCredentialsForIdentity:input completionHandler:^(AWSCognitoIdentityGetCredentialsForIdentityResponse * _Nullable response, NSError * _Nullable error) {
//how to update my configuration for AWS with
//AWSCognitoIdentityCredentials object?
}];
但不确定如何处理收到的AWSCognitoIdentityCredentials 回复 - 如何更新我的配置?
还发现了下一个:
这是否意味着没有其他方法可以做到这一点?还是错过了什么?
【问题讨论】:
标签: ios authentication amazon-dynamodb aws-lambda amazon-cognito