我不太熟悉亚马逊,所以有几个问题:
我想使用我自己的自定义后端解决方案,用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
如何更新我的配置?
下一步:
这是否表示没有其他方法?还是错过了什么?
表示存在有效的公共提供程序问题的错误,是因为您正在使用登录提供程序调用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后端,其登录映射为: 并使用以下后端代码: