未经身份validation的用户在AWS Cognito上authentication用户

我的代码在这里: 代码转贴,因为我想问一个更直接的问题。 如何在未经身份validation的用户和身份validation之间切换? 我的未authentication似乎caching,我已经使用这些方法:

[credentialsProvider clearCredentials]; [credentialsProvider clearKeychain]; 

在我的API代码的其余部分之前,它仍然无法正常工作。 任何帮助表示赞赏

注意:我知道这是行不通的,因为在我切换configuration/凭证提供程序后,使用lambda进行调用,只有授权用户才能调用此方法。

编辑@ behrooziAWS回答:

API代码:

  id<AWSCognitoIdentityProvider> identityProvider = [[DeveloperIdentityProviderClass alloc] initWithRegionType:AWSRegionUSEast1 identityId:nil identityPoolId:@"SOMEIDENTITYPOOLID" logins:@{@"MYIDENTITYPROVIDERNAME": @"MYUSERNAME"} providerName:@"MYIDENTITYPROVIDERNAME" ]; [credentialsProvider setIdentityProvider:identityProvider]; [credentialsProvider setLogins:@{@"MYIDENTITYPROVIDERNAME": @"MYUSERNAME"}]; [[credentialsProvider refresh] continueWithBlock:^id(BFTask *task){ [self testAuth]; return [BFTask taskWithResult:nil]; }]; 

完整的错误:BusyTime [27043:7097936] AWSiOSSDKv2 [详细] AWSURLResponseSerialization.m行:87 | – [AWSJSONResponseSerializer responseObjectForResponse:originalRequest:currentRequest:data:error:] | 响应正文:[{“message”:“请求中包含的安全令牌无效。”}] 2015-10-20 08:51:17.280 BusyTime [27043:7097936]错误:错误域= com.amazonaws.AWSLambdaErrorDomain代码= 0“无法完成操作UnrecognizedClientException”UserInfo = 0x7ff27ab41150 {NSLocalizedFailureReason = UnrecognizedClientException,responseStatusCode = 403,message =包含在请求中的安全标记是无效的。,responseHeaders = {type = immutable dict,count = 6,

重要的编辑:我硬编码我的刷新使用工作令牌和identityId。 所以:

 self.identityId = @"someID"; self.token = @"someToken"; return [super getIdentityId]; 

然后我所有的代码正在工作。 但显然这是不可持续的,我需要能够打电话给aws lambda刷新我的凭据。 但是,当我设置我的身份提供商,并设置我的login,我认为这是改变我的身份validation版本,但我需要未经身份validation调用aws lambda。 请参考我上面的代码链接,看看我的刷新方法,了解我很难描述什么。 也请让我知道这是否应该在一个新的线程,因为这是一个稍微不同的问题。 不太了解stackoverflow关于问题的政策。

另一个错误:[{“Message”:“User:arn:aws:sts :: 445291524102:assume-role / Cognito_BusyTimeAuth_Role / CognitoIdentityCredentials未被授权执行:lambda:资源上的InvokeFunction:arn:aws:lambda:us-east- 1:445291524102:function:login“}],所以现在我假设我的身份validation提供程序为我刷新这是不正确的loginstream。 我在想,我切换这个,所以我login我的API类。 当我返回我的身份证和代币时,我将它们保存到钥匙串中。 最后,我使用上面的API代码来切换我的login,并在我的刷新方法中,我只是返回我在钥匙串中find的内容。 唯一的问题是我不知道这个stream是否正确,因为它不真的“刷新”,因为我不叫我的后端。 我想知道是否可以通过从我的unauthangular色来回转换我的authangular色来刷新刷新,但这似乎是凌乱的。

[credentialsProvder clearKeychain]将清除identityId,凭证和任何login,所以clearCredentials是不必要的: clearKeychain文档

通常情况下,您不希望在转换为已通过身份validation的用户时清除身份标识。 如果您只是将您的提供程序和有效的login标记添加到login映射中,并调用[credentialsProvider refresh] ,则将使用相同的标识标识进行身份validation。 从这一点开始,如果您提供有效的login令牌,您将只能访问该身份。 如果要通过注销来切换身份,然后以身份validation的用户身份login,即使用clearKeychain