【问题标题】:Developer Authenticated Identities with Amazon使用亚马逊的开发人员身份验证
【发布时间】: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


    【解决方案1】:

    表示存在有效公共提供程序问题的错误是因为您使用登录提供程序调用 GetCredentialsForIdentity。但相反,流程是您从后端调用 GetOpenIdTokenForDeveloperIdentity,您会得到一个令牌作为响应。然后,要获取凭据,您可以调用 GetCredentialsForIdentity,在 logins 参数中使用键 cognito-identity.amazonaws.com 并将值作为从先前调用中收到的令牌。

    更新:

    为确保由 Amazon Cognito 提供的 Amazon DynamoDB uses credentials,您可以使用您的凭证提供商创建一个默认 AWSServiceConfiguration 并使用它来初始化客户端。

    // create a configuration that uses the provider
    AWSServiceConfiguration *configuration = [AWSServiceConfiguration configurationWithRegion:AWSRegionUSEast1 provider:credentialsProvider];
    
    // get a client with the default service configuration
    AWSDynamoDB *dynamoDB = [AWSDynamoDB defaultDynamoDB];
    

    【讨论】:

    • 你在 DynamoDB 中存储了什么?
    • Ub DynamoDB 目前我存储了所有用户的信息,后来我计划添加有关用户设备、房间、房屋、拓扑等的信息。我也考虑了来自 Cognito 的数据集,但实际上并不是什么我们需要
    • 因此您可以通过关注这篇博文 [mobile.awsblog.com/post/Tx1OSMBRHZVM9V0/….为此,您需要将 DynamoDB 表的哈希键作为 identityId。我们不建议为未经身份验证的用户存储数据,就像在设备上丢失了 identityId 一样,无法再次获取该用户的数据。如果您使用的是开发者身份验证的身份,那么您应该是安全的,但请注意存储有关未经身份验证的用户的数据。
    • 谢谢,但你能建议我应该如何处理收到的带有会话令牌平均类 AwscognitoidebtityCredentials 对象的响应 - 我想我应该以某种方式使用它来更新我的服务配置,但如何?想不通
    • 另外,我想让舒尔 cognito 将任何对 dynamodb 的请求解释为来自 authuser 的请求(在用户使用我的后端登录并且我从 cognito 请求此会话令牌之后)在这种情况下,我认为我应该使用接收更新为亚马逊和 dynamodbobjectmappet 标记我的系统配置,但我找不到这样做的方法
    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多