私はウェブアプリを作っています。 (APIゲートウェイを介したラムダのS3およびAPIのAngular 2)。認証については、cognitoとカスタムオーソライザーの両方でプレイしました(カスタムオーソライザーとcognitoを介してGoogleとFacebookで動作するように認証を構成しました)。カスタムオーソライザーの場合、認証ヘッダーを介してトークンを渡し、カスタムオーソライザーがそれを検証します。
私はどちらを進めるべきか、そして彼らの長所と短所は何かについてのアドバイスを探しています。私が考えることができるものは次のとおりです。
AWSコグニート:
長所
短所
カスタムオーソライザー
長所
短所
そうは言っても、私は今のところカスタムオーソライザーに傾いています。このトピックに関するアドバイスが必要です。
PS:私が投稿した質問に対する明確な答えはないことは知っていますが、アプリケーションの認証を決定しようとしている人々にとっては非常に役立ちます。
さて、認証とセキュリティは確かに困難であり、AWSセキュリティチームによって考えられ、対処されてきた多くの問題があり、考えたり実装したりしてアプリケーションを安全でなくする可能性があります。私はカスタム承認者を実装して、セッション内のすべてのリクエストで繰り返されるbase64でエンコードされた値である承認トークン(承認ヘッダーを介して渡される)を期待しました。 RC4とdiffiehellmanの弱点により、TLSが攻撃を受けやすくなっていることがわかりました。 IAMを使用して単にcognitoを使用する場合、AWSsigv4リクエスト署名はこれらの弱点からユーザーを保護します。詳細については、 https://www.youtube.com/watch?v=zmMpgbIhCpw をご覧ください。
Cognito/IAMを使用するもう1つの利点は、CSRFリプレイ攻撃からユーザーを保護することです。リクエストの署名には、タイムスタンプの使用が含まれます。 IAMは、5分以上前に署名されたリクエストをすべて拒否します。
要するに、可能であればカスタムオーソライザーの使用を避け、cognitoでIAMを使用してください。あなたはあなた自身に感謝するでしょう。
これは短い答えですが、両方を使用してみませんか?
CognitoユーザープールとCognitoフェデレーションIDを使用するために実際に実装されているカスタム承認者を使用します。
Cognitoを使用する場合、すべてを使用しないことを選択できます。
たとえば、カスタムオーソライザーを設定し、Lambdaは実際にCognitoユーザープールAPIを使用してユーザーを認証しています。 Cognitoユーザープールにすべてのパスワード、トークンなどを処理させます。