2016-11-28 185 views
0

我們正在研究一直在使用對Cognito進行Unauthenticated Access的iOS應用程序。我們現在添加身份提供者:Cognito用戶池。iOS與多個設備的AWS Cognito身份驗證

我們看到,當設備A執行從Unauthenticated到Authenticated的登錄過程時,Cognito ID保持不變(如預期的那樣)。然後,當設備B登錄時,Unauthenticated進行身份驗證。我們希望用戶從設備A獲得Authenticated Cognito ID,事實並非如此。

即便如此,也許他們都從設備A轉換到Cognito ID?這似乎也並非如此。這兩個設備都有獨立的Cognito ID,但使用Cognito User Pools中的相同用戶帳戶。但都不共享Cognito ID,這似乎違背了文檔描述的內容。

有人可以確認我們正在做的是一個有效的工作流程,也許我們可能會做錯什麼?

我們正在將Cognit ID存儲在後端服務器中,以將該數據綁定到用戶,但Cognit ID的意外更改,很難提出一個好的解決方案。

回答

3

即使他在兩個不同的設備上進行了身份驗證,您是正確的,AWS Cognito身份標識對於經過身份驗證的用戶也是相同的。

你所描述的不是預期的行爲。

也許你沒有「真正」認證。 「真正」認證是什麼意思?這意味着您已經完成了擦除鑰匙串並獲取憑證的過程,因爲它是提供給身份提供者並獲取登錄字典的憑證提供者(然後分配一個適當的identityId(當它變得相同時作爲其他設備))。

您可以通過查看聯合身份驗證的AWS控制檯並查看身份瀏覽器來判斷您是否「真正」身份驗證。對於所涉及的身份的「登錄」數量不應該是0 ......它應該顯示(在您的案例中)1,並且如果您單擊身份,您應該看到它已通過身份驗證。

修復?登錄後回來並獲得會話後,您必須「獲取證書ID」(在ios sdk中是「證書」方法)。

此鏈接可以幫助cognito notes and diagram

+0

感謝您的反饋,我們還在打我們實現了路障,我們甚至克隆你的項目例如在你的github上進行比較,並實現是非常接近的。 – Trihedron

+0

我們在登錄時看到的主要問題是getSession不會返回令牌。 userPoolUser(AW​​SCognitoIdentityUser).isLoggedIn一直是false,但在getSession continue塊內部,並且在憑證方法中。看起來我們需要登錄用戶。即使向getSession提供一個錯誤的密碼,也允許完成塊調用,就好像它與成功的用戶/密碼沒有區別。 – Trihedron

+1

如果使用interactiveAuthenticationDelegate,則會針對成功和失敗調用didCompletePasswordAuthenticationStepWithError委派方法。成功案例的可選參數「錯誤」爲零。 ...或者你只是用uid和密碼做getSession。無論您需要確保憑證提供程序正確連接到池,並且在使用AWSCognitoCredentialsProvider創建憑證提供程序時完成...將pool_id和您的用戶池(池)指定爲identityProviderManager。這樣pool.logins被調用。 – Bruce0