0

有點多個問題,但是,Amazon Cognito AuthFlow

如何在.NET中使用Amazon Cognito用戶池執行身份驗證。 我發起驗證下列要求:

var response1 = client.InitiateAuth(new InitiateAuthRequest() 
      { 
       AuthFlow = AuthFlowType.USER_SRP_AUTH, 
       AuthParameters = new Dictionary<string, string>() 
       { 
        {"USERNAME","User" }, 
        {"SRP_A" , A } 
       }, 
       ClientId = "xxxxxxxxxxxxxxxxxxxxxxxxxxx" 
      }); 

他們的文檔是真的,真的壞了,我似乎無法找到什麼傳遞時,我想應對挑戰。

client.RespondToAuthChallenge(new RespondToAuthChallengeRequest() 
     { 
      ChallengeName = ChallengeNameType.PASSWORD_VERIFIER, 
      ChallengeResponses = { /*WHAT am I supposed to add here, and where can I find any documnetation on what is expected?*/ }, 
      Session = response1.Session, 
      ClientId = "xxxxxxxxxxxxx" 
     }); 

在一個側面說明,我想用Cognito聯合身份以保護自定義.NET API,所以我的想法是使用令牌返回由Cognito作爲JWT傳遞到的WebAPI的一面,我在那裏然後將解碼並驗證令牌。這是使用Amazon Cognito的預期方式嗎? (至少現在我不想使用亞馬遜API網關)。

我假設它只是配置默認的JWT中間件的OWIN,或者我應該預期別的嗎?

+0

你側面說明基本上是正確的:用戶池給你非常相似的JWT令牌作爲谷歌等......,並以同樣的方式被身份池使用。 –

+0

關於SRP [這是一種標準算法](https://en.wikipedia.org/wiki/Secure_Remote_Password_protocol),但我還沒有用C#與Cognito合作。 –

回答

0

developer guide涉及到了什麼需要進入發起認證和響應認證挑戰的請求。

您可能會發現使用AdminInitiateAuth API(詳細介紹在同一鏈接中)可以更輕鬆地將srp身份驗證卸載到Cognito,這將爲您填充這些空白。

移動SDK爲您提供了SRP身份驗證的包裝,這有助於填寫這些參數,但其他SDK沒有這樣的功能。您可以使用SDK的代碼(所有代碼均位於GitHub中)來填充SRP_A之類的內容,但使用AdminInitiateAuth可能會更容易。

+1

'AdminInitiateAuth'不會「卸載srp認證」 - 因此流程名稱爲'ADMIN_NO_SRP_AUTH'。 SRP是避免通過線路發送密碼的算法,因此使用'AdminInitiateAuth'嚴格來說不太安全,儘管它基本上是互聯網上每一個其他登錄頁面所做的。基本上它是用於服務器端的。 –

+0

它卸載它。認證服務器代表您執行srp,但要這樣做需要用戶名和密碼作爲事實上的客戶端。文件可能不是非常明確,因爲你的推論是公平的,但它確實減輕了負擔。來源:我在認知團隊 –

+0

這個名字背後的想法是,你不必做SRP,它看起來像互聯網上的每個登錄頁面,但在後臺它使用相同的後端存儲,做所以通過利用SRP。 –

0

這個人在這裏介紹瞭如何在.NET應用程序中進行SRP計算。我不得不添加一些邏輯來更新創建控制檯用戶時,發出的臨時密碼,但比它就像一個魅力其他

AWS Cognito SRP Login in C#/.NET

相關問題