所以我一直在试图弄明白这一点,但文档不够清晰。
我正在尝试使用AWS cognito用户池和联邦身份池。
在网上,他们说你可以连接这两个人,然后通过你的用户池验证用户,从你的身份池获得证书。现在我已经将它们连接起来,它显示为授权方法,但我无法弄清楚在目标c中要做什么才能让它工作。我只能让未经授权的用户进入我的联邦身份池,而不是授权用户。
我还负责用户池的所有工作(创建和验证用户),因此只需将他们放入联邦身份池中获取权限。
有人可以在objective-c中发布一个代码示例来说明如何实现它吗?或者带我走一下如何做的逻辑步骤?
我一直在看这些链接:http://mobile.awsblog.com/post/TxGNH1AUKDRZDH/Announcing-Your-User-Pools-in-Amazon-Cognito
如何将Cognito用户池与Facebook等外部提供商相结合?
几乎每一个aws链接
这里的问题的更新是一些代码:
我能够注册和验证用户,但是它没有在用户联合身份池的控制台上注册,只有未经身份验证。这是我的AWSServiceConfiguration的问题吗?(等)
这是我们用来创建用户的注册方法
RCT_EXPORT_METHOD(submitUser: (NSString*) email and:
(NSString*) gender and:
(NSString*) name and:
(NSString*) nickname and:
(NSString*) picture and:
(NSString*) phone_number and:
(NSString*) preferred_username and:
(NSString*) hashedPass and:
(RCTResponseSenderBlock)callback){
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];
NSMutableArray * attributes = [NSMutableArray new];
AWSCognitoIdentityUserAttributeType * userEmail = [AWSCognitoIdentityUserAttributeType new];
userEmail.name = @"email";
userEmail.value = email;
AWSCognitoIdentityUserAttributeType * userGender = [AWSCognitoIdentityUserAttributeType new];
userGender.name = @"gender";
userGender.value = gender;
AWSCognitoIdentityUserAttributeType * userName = [AWSCognitoIdentityUserAttributeType new];
userName.name = @"name";
userName.value = name;
AWSCognitoIdentityUserAttributeType * userNickname = [AWSCognitoIdentityUserAttributeType new];
userNickname.name = @"nickname";
userNickname.value = nickname;
AWSCognitoIdentityUserAttributeType * userPicture = [AWSCognitoIdentityUserAttributeType new];
userPicture.name = @"picture";
userPicture.value = picture;
AWSCognitoIdentityUserAttributeType * userPhone = [AWSCognitoIdentityUserAttributeType new];
userPhone.name = @"phone_number";
userPhone.value = phone_number;
AWSCognitoIdentityUserAttributeType * userPreferredUsername = [AWSCognitoIdentityUserAttributeType new];
userPreferredUsername.name = @"preferred_username";
userPreferredUsername.value = preferred_username;
[attributes addObject:userEmail];
[attributes addObject:userGender];
[attributes addObject:userName];
[attributes addObject:userNickname];
[attributes addObject:userPicture];
[attributes addObject:userPhone];
[attributes addObject:userPreferredUsername];
NSMutableString *str = [NSMutableString string];
[str appendString:name];
[str appendString:name];
NSString *immutableString = str; // Change later to unique identifier
[[pool signUp:immutableString password:html" target="_blank">hashedPass userAttributes:attributes validationData:nil]
continueWithBlock:^id(AWSTask<AWSCognitoIdentityUser*> *task) {
if (task.error) {
RCTLog(@"Error: %@", task.error);
}
if (task.exception) {
RCTLog(@"Exception: %@", task.exception);
}
if (task.result) {
RCTLog(@"Successfully registered user: %@",task.result);
}
callback(@[[NSNull null],@NO]);
return nil;
}];
}
使用电子邮件代码方法验证用户
RCT_EXPORT_METHOD(verifyUser:(nonnull NSString *)userName and:
(nonnull NSString *)code and:
(RCTResponseSenderBlock)callback) {
AWSCognitoIdentityUserPool *pool = [AWSCognitoIdentityUserPool CognitoIdentityUserPoolForKey:@"UserPool"];
AWSCognitoIdentityUser * user = [pool getUser:userName];
[[user confirmSignUp:code] continueWithBlock:^id(AWSTask<AWSCognitoIdentityProviderConfirmSignUpResponse*> *task) {
bool pass = NO;
if(task.error){
RCTLog(@"Error: %@", task.error);
}
else if(task.exception){
RCTLog(@"Exception: %@", task.exception);
}
else{
RCTLog(@"Successfully confirmed user: %@",user.username); pass = YES;
}
// Return TRUE If Succead
if(pass){
callback(@[[NSNull null],@YES]);
}
else{
callback(@[[NSNull null],@NO]);
}
return nil;
}];
}
在Appdelegate.m中
AWSServiceConfiguration *serviceConfiguration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:nil];
AWSCognitoIdentityUserPoolConfiguration *configuration = [[AWSCognitoIdentityUserPoolConfiguration alloc]
initWithClientId:@"clientidhere"
clientSecret:@"clientsecrethere"
poolId:@"poolidhere"];
[AWSCognitoIdentityUserPool registerCognitoIdentityUserPoolWithConfiguration:serviceConfiguration userPoolConfiguration:configuration forKey:@"UserPool"];
AWSCognitoCredentialsProvider *credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
initWithRegionType:AWSRegionUSEast1
identityPoolId:@"identitypoolIDhere"];
AWSServiceConfiguration *config = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1 credentialsProvider:credentialsProvider];
[AWSServiceManager defaultServiceManager].defaultServiceConfiguration = config;
[AWSSQS registerSQSWithConfiguration:config forKey:@"USWest2SQS"]; // Needed for sqs work throughout the app
我解决了这个问题,提供了一个自定义标识提供商
@interface CustomIdentityProvider : NSObject <AWSIdentityProviderManager>
@property (nonatomic, retain) NSDictionary *tokens;
- (AWSTask *) logins;
@end
@implementation CustomIdentityProvider
- (AWSTask *) logins {
AWSTask *task = nil;
if (nil != self.tokens) {
return [AWSTask taskWithResult:self.tokens];
}
return task;
}
@end
创建AWSCognitoCredentialsProvider时,需要分配identityProviderManager
self.identityProviderManager = [[CustomIdentityProvider alloc] init];
self.credentialsProvider = [[AWSCognitoCredentialsProvider alloc]
initWithRegionType:AWSRegionUSEast1
identityPoolId:self.identityPoolId
identityProviderManager:self.identityProviderManager];
一旦设置好了此项,就需要填充令牌字典。这是在调用getSession并获取AWSCognitoIdentityUserSession后完成的。
AWSCognitoIdentityUserSession *session; // Obtained from getSession
NSString *userPoolName = [NSString stringWithFormat:@"cognito-idp.us-east-1.amazonaws.com/%@", self.poolId];
NSDictionary *dict = @{userPoolName : session.idToken.tokenString};
self.customIdentityProvider.tokens = dict;
假设您是通过API网关中的SDKGeneration功能生成AWSApigateway客户端代码,那么您应该已经做好了所有设置,可以作为经过身份验证的用户进行API网关调用。
(请注意,不要忘记配置您的联合身份,为经过身份验证的用户设置IAMS角色,以允许执行api:Invoke。)
我正在使用AWS Congito用户池进行帐户管理,其中Cognoto标识池将此用户池作为标识提供者。我用它来控制通过API网关对API的访问,API网关向Lambda发送请求。我的Lambda是使用Micronaut用Java8实现的。所有这些都很好。 在Lambda中,我从中的获得名称: 在Cognito标识符的字符串名称中返回的是什么。像这样的东西: us-east-1:xxxxe650-5
我正在使用令牌式认证过程。客户端获得令牌后,它或者被设置在客户端的cookies中(对于Web),或者被设置在客户端请求的授权头中(对于移动设备)。但是,为了获得有效的令牌,客户端必须首先使用有效的用户名/密码组合“登录”。我的问题是: 通过在授权标头中发送用户名/密码组合与作为请求的JSON正文中的参数(假设我使用的是HTTPS)是否有任何额外的安全性? 我只需要在每次会话中发送用户名/密码组合
我有一个混合移动应用程序使用AWS Javascript SDK与Amazon Cognito集成,使用Cognito用户池作为身份提供者。很管用。 我需要使用AWS API遍历数据以生成报告。一个关键部分是列出哪个用户(显示他们的用户名)与哪些项(与他们的认知身份相关联)相关联。
我们正在研究为我们的应用程序使用用户池。我想用REST的方式来尝试API。https://docs.aws.amazon.com/cognito-user-identity-pools/lates/apireference/welcome.html中的文档不像其他文档那样有请求和响应示例。寻找SignUp、ResendConfirmationCode、ChangePassword和ConfirmS
我想我获得了使用授权代码授予类型的OAuth2流。资源所有者登录到服务器,然后使用授权代码重定向到客户端。然后客户端使用授权代码向授权服务器查询访问令牌和刷新令牌。这就是我困惑的地方。 当访问令牌过期时,客户端应该使用授权码还是刷新令牌来获取新的访问令牌?如果您有授权代码,为什么要使用刷新令牌? 注:我并不是在找一个回答说“刷新令牌是可选的”,因为我正在为amazon-alexa编写这个服务器,这
我喜欢通过基于Java的AWS-CDK版本0.24.1创建cognito用户池。在我收到了InvalidParameterException错误。 服务:AWSCognitoIdentityProvider 状态代码:400 错误代码:ValueDealPosialExtExc:Qualito无效属性DATABATYPE输入,考虑使用提供的属性数据类型枚举 可能使用自动验证属性(Arrays.as