当前位置: 首页 > 知识库问答 >
问题:

开发人员验证身份与亚马逊

任宾鸿
2023-03-14

我不太熟悉亚马逊,所以有几个问题:

我想使用我自己的自定义后端解决方案,用Cognito为亚马逊上的用户执行登录。找到了这个可能的解决方案。这个后端为我注册和登录后返回

{
    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";
}

我想遵循这个指南。但根据这一点,我应该提供标识提供商名称和令牌,并将其设置为任何社会的登录后:

credentialsProvider.logins = @{
    @(AWSCognitoLoginProviderKeyFacebook): token
};

作为IdentityProviderName我使用了在config.json

"DEVELOPER_PROVIDER_NAME": "<ProviderName>"

但我有一个例外,我没有任何提供者

AWSCognitoCreentialsProvider getCreentialsAnd Cognito:已验证的:]_block_invoke|GetCreentialsForId相失败。错误是[Error Domain=com.amazonaws.AWSCognitoIdtyErrorDomain Code=8"(null)"UserInfo={__type=InvalidParameterExc0019,消息=请提供有效的公共提供程序}]

当我转到IAM控制台创建providerID时,它要求我选择提供程序的类型(OpenID或SAML)

所以我真的不明白我到底应该放什么?选择什么类型。

对于服务器,我使用Lambda服务和DynamoDB服务,对于web页面,我使用S3。

根据这一流程:

我已经完成了前4个步骤,并且在第5个步骤上进行了叠加,所以我只需要将此数据发送到Cognito(不需要准备我的定制开发提供程序,因为我已经有了idendityID和token,这看起来不正确)。

作为结果

开发者身份验证-仅用于从lambda登录方法,但当我尝试使用DynamoDB用户不身份验证。

已添加所有角色-当前我为UNTAH用户添加临时角色

 {
        "Sid": "DynamoDBPolicy",
        "Effect": "Allow",
        "Action": [
            "dynamodb:*"
        ],
        "Resource": [
            "*"
        ]
    }

一切都好,但不是很好

问题-如何使Cognito DevAuth与接收令牌从我的后端解决方案放在Lambda?我错过什么了吗?

使现代化

感谢@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如何更新我的配置?

下一步:

这是否表示没有其他方法?还是错过了什么?

共有1个答案

边健
2023-03-14

表示存在有效的公共提供程序问题的错误,是因为您正在使用登录提供程序调用GetCre的alsForId相。但是相反的流程是,您从后端调用GetOpenIdTokenForDeveloperIdid,您会得到一个令牌作为响应。然后,为了获得凭据,您可以调用在登录参数和值中cognito-identity.amazonaws.com键的GetCreintalsForIdid作为从上一次调用中接收的令牌。

更新:

要确保Amazon DynamoDB使用由Amazon Cognito出售的凭据,您可以使用凭据提供商创建默认的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];
 类似资料:
  • 我试图为AWS实现“开发人员身份验证身份”,如下所示:https://AWS.amazon.com/blogs/mobile/amazon-cognito-innecling-developer-authenticated-identities/ 我很好地理解了基本流程。 我怎样才能做到这一点?

  • 它在没有身份验证的情况下工作得很好,但我想在身份验证的情况下使用它。有人能告诉我该怎么做吗?我是swift和AWS认知服务的新手。

  • 成员身份验证 PDF版下载 OAuth2简介 如流平台提供了OAuth的授权登录方式,可以使如流客户端(移动端或者桌面端内嵌打开)打开的网页获取成员的身份信息,从而免去登录环节。 企业应用中的URL链接(包括自定义菜单或者消息中的链接),均可通过OAuth2.0验证接口来获取成员的身份信息(UserId)。 第一步:构造网页授权链接 获取用户在如流客户端打开应用(或者链接)时的用户身份,如流提供两

  • 我正在建立一个Java/GAE/Angular app engine项目,并试图要求在某些路径登录。我允许google处理身份验证,但我看到一个nullpointer,它似乎源自提供的。 下面是我的web.xml的相关部分: 下面是StackTrace:

  • 当用户启动应用程序时,他们是一个未经身份验证的用户,并且他们将从iOS应用程序中的DeveloperAuthenticatedIdentityProvider类获得。我可以在cognito控制台中看到。但是,当他们登录时,我调用了我的nodejs后端,其登录映射为: 并使用以下后端代码: