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

Cognito身份验证工作正常但显示错误?

查宜民
2023-03-14

基本上,我使用开发人员身份验证来验证我的用户。即使这个错误显示:

AWSiOSSDKv2[Verbose]AWSURLResponseSerialization.m行:87 |-[AWSJSONResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:][124;响应主体:[{“u类型”:“InvalidParameterException”,“message”:“请提供有效的公共提供程序”]2015-10-20 17:50:19.251 BusyTime[56549:7365231]awsiosdkv2[error]AWSCredentialsProvider.m行:435 | | u 73-[AWSComgnitoredentialsProvider GetCredentials with Cognito:authenticated:][U block|u invoke | GetCredentials for Identity失败。错误为[Error Domain=com.amazonaws.awscognitoIdentity ErrorDomain Code=7“该操作无法完成。(com.amazonaws.awscognitoIdentity ErrorDomain错误7.)“UserInfo=0x7f9d9342dde0{{uuu type=InvalidParameterException,message=请提供有效的公共提供程序}]

尽管显示了这个错误,但我仍然返回了我的标识符和令牌,并成功调用了一个需要经过身份验证的特权才能调用的lambda方法。我相信这与我的刷新方法有关,但我不太确定。请帮我处理这个错误。

我的凭据提供程序代码:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    [AWSLogger defaultLogger].logLevel = AWSLogLevelVerbose;
    id<AWSCognitoIdentityProvider> identityProvider = [[BusytimeAuthenticated alloc] initWithRegionType:AWSRegionUSEast1
                                                                                             identityId:nil
                                                                                         identityPoolId:@"EXAMPLEPOOLID"
                                                                                logins:@{@"login.busytimeapp": [defaults objectForKey:@"username"]}
                                                                                           providerName:@"login.busytimeapp"
                                                       ];

    credentialsProvider = [[AWSCognitoCredentialsProvider alloc] initWithRegionType:AWSRegionUSEast1
                                                                   identityProvider:identityProvider
                                                                      unauthRoleArn:nil
                                                                        authRoleArn:nil];

    configuration = [[AWSServiceConfiguration alloc] initWithRegion:AWSRegionUSEast1
                                                credentialsProvider:self.credentialsProvider];
    AWSServiceManager.defaultServiceManager.defaultServiceConfiguration = configuration;
    [[credentialsProvider refresh] continueWithBlock:^id(BFTask *task){
        [self testAuth];
        return nil;
    }];

我的刷新方法:

- (BFTask *)refresh {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if (![self authenticatedWithProvider]) {
        return [super getIdentityId];
    }else{
        NSDictionary *post = [[NSDictionary alloc] initWithObjectsAndKeys:
                              [defaults objectForKey:@"username"], @"username",
                              [defaults objectForKey:@"password"], @"password",
                              nil];
        NSError *error;
        NSData *postData = [NSJSONSerialization dataWithJSONObject:post options:0 error:&error];
        NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]];
        NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
        [request setURL:[NSURL URLWithString:@"SOMEURL"]];
        [request setHTTPMethod:@"POST"];
        [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
        [request setHTTPBody:postData];
        NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
        __block BOOL isLogged = false;
        [[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSDictionary *newJSON = [NSJSONSerialization JSONObjectWithData:data
                                                                    options:0
                                                                      error:&error];
            isLogged = true;
            if(!newJSON){
                NSLog(@"DID NOT AUTHENTICATE");
            }else{

            self.identityId = [newJSON objectForKey:@"IdentityId" ];
            self.token = [newJSON objectForKey:@"Token" ];
            NSLog(@"Result: %@", newJSON);
            }

        }] resume];

        return [super getIdentityId];

    }
    return [super getIdentityId];
}

共有1个答案

龚招
2023-03-14

这里的问题是,您正在将登录映射中的登录提供者名称作为密钥传递。对于开发人员身份验证的身份,您不能这样做。

相反,您应该在地图中使用Cognito身份提供者名称Cognito-identity.amazonaws.com,就像文档中所说的那样。这将修复您的异常。

 类似资料:
  • 我正在尝试在 Swift 中创建一个 iOS 应用程序,该应用程序使用 AWS Lambda 使用以下身份验证服务 - https://github.com/danilop/LambdAuth 它使用适用于 iOS 的 AWS 移动开发工具包与迪纳摩数据库和 Lambda 进行通信 - http://docs.aws.amazon.com/mobile/sdkforios/developergui

  • 今天我为一个新项目安装了laravel 6. x版本。 我的系统中有PHP7.3,因此成功安装了Laravel6。 然后,我运行此命令为VueJS设置身份验证UI。 随着这个命令: 但是当我检查我的登录页面时,它只是一个html骨架。 我通过互联网进行了检查,找到了解决方案,并尝试运行此命令, 但我仍然得到一个丑陋的登录页面没有css和Js文件。我检查了CSS和JS文件,但没有找到解决方案。 任何

  • 使用NetBeans 8.1。 我有一个SpringBoot项目,它使用Thymeleaf作为模板,除了在html页面中使用标记外,一切都正常 <代码> 我有一个本地名为“xmlns:th”的error属性不能序列化为XML 1.0,我可以使用thymeleaf函数,如th:each或th:text,但它们总是显示相同的错误,我在键入时无法提供建议,有没有办法解决这个问题?

  • 我遵循了为keycloak(版本4.8.3)设置自定义身份验证器spi的演练。我几乎只使用从这里得到的示例代码。我只更改了以便能够编译项目并使用部署它。而且它起作用了...我可以在keycloak中配置新的身份验证流,更新浏览器流并设置所需的动作。但是,如果我想在应用程序中使用新的身份验证,我会得到以下消息:。并且在控制台中得到以下输出: 我在github上查找了文件DefaulTauthenti

  • 我正在尝试使用mongo java驱动程序3.4从java访问mongodb。我写了下面的代码来访问mongodb,即使我在连接时输入了错误的凭据,我仍然能够访问我的数据库。 当我试图从ubuntu的终端访问mongo数据库时。它要求认证。

  • 我正在使用React并尝试处理用户的密码更改。我正在发送一个如下的POST请求: ...我得到一个401错误:“未提供身份验证凭据”。 然而,如果我通过邮递员发送完全相同的请求,那么效果很好。 我也在同一个应用程序中执行GET请求以获取用户数据,它也可以毫无问题地工作: 可能是什么问题。。。?