AWS Cognito

时间:2015-10-19 01:31:19

标签: ios authentication amazon-web-services amazon-cognito

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

[credentialsProvider clearCredentials];
[credentialsProvider clearKeychain];
在我的api代码的其余部分之前

它仍然不起作用。任何帮助表示赞赏

注意:我知道它不起作用,因为我在切换配置/凭证提供程序后立即使用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]错误:错误Domain = com.amazonaws.AWSLambdaErrorDomain Code = 0“操作无法完成.UnsrecognizedClientException”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来刷新我的凭据。但是当我设置我的身份提供者并设置我的登录时,我认为它正在改变我的身份验证版本,但我需要在未经身份验证的情况下调用aws lambda。 请参阅上面的代码链接并查看我的刷新方法,了解我很难描述的内容。如果这应该是一个新的主题,请告诉我,因为这是一个稍微不同的问题。不太熟悉stackoverflow的问题政策。

另一个错误:[{“Message”:“User:arn:aws:sts :: 445291524102:assume-role / Cognito_BusyTimeAuth_Role / CognitoIdentityCredentials无权执行:lambda:InvokeFunction on resource:arn:aws:lambda:us -east-1:445291524102:function:login“}],现在我假设我的auth提供程序为我的刷新,这是不正确的登录流程。我想我会切换它以便我登录我的API类。当我返回我的身份证和令牌时,我将它们保存到钥匙串中。最后,我使用上面的API代码来切换我的登录,在我的刷新方法中,我只返回我在钥匙串中找到的内容。唯一的问题是我不确定这个流是否正确,因为它实际上并没有“刷新”,因为我没有调用我的后端。我想知道是否可以通过从我的unauth角色来回改变我的auth角色来包装刷新,但这看起来很混乱。

1 个答案:

答案 0 :(得分:3)

[credentialsProvder clearKeychain]将清除identityId,凭据和任何登录信息,因此不需要clearCredentials:clearKeychain Documentation

通常,您不希望在转换为经过身份验证的用户时清除您的身份ID。如果您只是将您的提供商和有效登录令牌添加到登录映射并调用[credentialsProvider refresh],您将使用相同的身份ID进行身份验证。从那时起,如果您提供有效的登录令牌,您将只能访问该身份。如果您想通过注销然后以经过身份验证的用户身份登录来切换身份,那就是使用clearKeychain时。