2016-11-17 92 views
2

我一直在製作一個web應用程序。 (S3上的Angular 2和API網關中的lambda中的API)。對於身份驗證,我使用cognito和自定義授權者(我配置了身份驗證,通過自定義授權者和認知與Google和Facebook bith一起工作)。在自定義授權者的情況下,我通過authroization頭傳遞令牌,我的自定義授權者驗證它。自定義授權者vs Cognito - 亞馬遜api網關的身份驗證 - Web應用程序

我在尋找哪些建議我應該繼續前進,他們的優點和缺點是什麼。我能想到的的是:

AWS cognito:

優點

  1. AWS SDK處理一切都是爲了你,你不能做太多的錯誤在你的認證過程。
  2. 通過IAM對AWS資源進行細粒度訪問控制。
  3. 驗證時不需要每個API前面的額外lambda函數。

缺點

  1. 需要在客戶端專門使用AWS SDK。程序員必須將其添加到他們的工具鏈中,並在開發過程中使用它。增加了額外的複雜性。
  2. 對資源的細粒度訪問控制並非真正必需的,因爲所需的唯一訪問權限是API網關。

自定義授權

優點

  1. 你可以有你的身份驗證機制,你想要的方式。對認證和授權的最終控制。
  2. 您可以讓UI使用標準令牌(JWT)調用API,並且開發者的流程保持不變。無需額外考慮AWS SDK。

缺點

  1. 認證需要很多的思考,並傾力打造的。
  2. 錯過一些關鍵方面的機會總是存在。
  3. 它像重新發明輪子。爲什麼當亞馬遜已經爲你做到這一點。

之所以這麼說,我傾向於定製授權人現在。這裏需要關於這個話題的建議。

PS:我知道不可能有一個明確的答案,我已經發布了這個問題,但它是有很大的幫助人們試圖爲他們的應用程序的認證決定。

+0

我來自Cognito團隊,您的利弊清單似乎是合理的。您希望得到的主要內容可歸結爲您的應用程序需求,但Cognito的範圍憑證概念,安全地獲取AWS憑證而不嵌入資源,所有用戶的唯一標識符以及經過身份驗證的用戶與未經身份驗證的用戶的概念是最常見的原因可以在這裏使用Cognito聯合身份。 –

+0

根據您的應用需求,您是否要使用這些需求。這聽起來像我提到的大多數原因都不適用於某些人,所以如果沒有它,這不是沒有問題的。 –

+0

謝謝傑夫。我確實爲我的應用程序使用了自定義授權程序。不過我後來發現,由於額外的API層和10 MB的請求大小限制,上傳文件到S3到達API網關並不好。所以現在我正在使用所有API和cognito的自定義授權程序來上傳文件。 – Prabhat

回答

2

沒關係,認證和安全確實是很難,有很多已經想過和AWS安全團隊,你可能不會想到並實施,使您的應用程序不安全的照顧問題。我實現了我的自定義授權者,期望授權令牌(通過授權頭傳遞),這是一個base64編碼值,可以在會話中的所有請求中重複使用。事實證明,由於RC4和diffie hellman的弱點,這使得TLS容易受到攻擊。如果我們僅使用IAM使用cognito,那麼AWS sigv4請求籤名可以保護您免受這些弱點的影響。有關更多詳情,請觀看https://www.youtube.com/watch?v=zmMpgbIhCpw

使用cognito/IAM的另一個好處是它可以保護您免受CSRF重播攻擊。請求籤名涉及使用時間戳。 IAM將拒絕任何超過〜5分鐘前簽署的請求。

總之,如果可以的話,請避免使用自定義授權者,並使用帶有cognito的IAM。你會感謝你自己。

相關問題