2015-10-19 190 views
1

我的代碼在這裏:code 轉發,因爲我想問一個更直接的問題。如何在未經身份驗證的用戶和身份驗證之間切換?我似乎未認證的緩存和我已經使用這些方法:Unauthenticated用戶認證用戶在AWS Cognito

[credentialsProvider clearCredentials]; 
[credentialsProvider clearKeychain]; 

我的API代碼的其餘部分之前,它仍然無法正常工作。任何幫助表示讚賞

注意:我知道這是行不通的,因爲我在切換配置/憑證提供程序後使用lambda進行調用,只有授權用戶應該可以調用此方法。

EDIT @behrooziAWS回答:

API CODE:

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]; 
}]; 

全部錯誤: 佔用時間[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 Code = 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刷新我的憑證。但是當我設置我的身份提供者並設置我的登錄名時,我認爲它會將我更改爲我的身份驗證版本,但我需要未經身份驗證才能調用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「}],所以我現在假設我的身份驗證提供程序用於刷新這是不正確的登錄流。我在考慮改變它,以便在我的API類中登錄。當我返回我的身份ID和令牌時,我將它們保存到鑰匙串中。最後,我使用上面的API代碼來切換我的登錄,並在我的刷新方法中,我只返回我在鑰匙串中找到的內容。唯一的問題是我不確定這個流是否正確,因爲它沒有實際「刷新」,因爲我沒有調用我的後端。我想知道是否可以通過從我的unauth角色來回轉換我的身份驗證角色來包裝刷新,但這看起來很混亂。

回答

3

[credentialsProvder clearKeychain]將清除identityId,憑證和任何登錄,所以clearCredentials是不必要的:clearKeychain Documentation

通常你不想要清除您的身份ID,當你過渡到身份驗證的用戶。如果您只是將您的提供商和有效的登錄令牌添加到登錄地圖中,並致電[credentialsProvider refresh],則您將使用相同的身份標識進行身份驗證。從這一點開始,如果您提供有效的登錄令牌,您將只能訪問該身份。如果要通過註銷來切換身份,然後以身份驗證用戶身份登錄,即使用clearKeychain

+0

我得到這個錯誤,然後當我嘗試使用AWS Lambda進行刷新時。 {「message」:「請求中包含的安全令牌無效。」} 我認爲這是因爲當我更新我的登錄名和身份提供程序並調用刷新時,它認爲我是已驗證的用戶,但只有未經身份驗證的用戶可以調用登錄/註冊。我現在將更新我的api代碼,以供您查看並顯示完整的錯誤。 – user2977578

+0

請看看我更新的問題。 – user2977578

+0

我要創建一個新線程,你已經回答了我的問題。 – user2977578

相關問題