web-dev-qa-db-ja.com

カスタムオーソライザーとCognito-Amazonapiゲートウェイの認証-Webアプリケーション

私はウェブアプリを作っています。 (APIゲートウェイを介したラムダのS3およびAPIのAngular 2)。認証については、cognitoとカスタムオーソライザーの両方でプレイしました(カスタムオーソライザーとcognitoを介してGoogleとFacebookで動作するように認証を構成しました)。カスタムオーソライザーの場合、認証ヘッダーを介してトークンを渡し、カスタムオーソライザーがそれを検証します。

私はどちらを進めるべきか、そして彼らの長所と短所は何かについてのアドバイスを探しています。私が考えることができるものは次のとおりです。

AWSコグニート:

長所

  1. AWS SDKがすべてを処理し、認証プロセスで多くの間違いを犯すことはありません。
  2. IAMを介したAWSリソースのきめ細かいアクセス制御。
  3. 認証に、すべてのAPIの前に追加のラムダ関数は必要ありません。

短所

  1. 特にクライアント側でAWSSDKを使用する必要があります。プログラマーはこれをツールチェーンに追加し、開発中に使用する必要があります。複雑さが増します。
  2. 必要なアクセスはAPIゲートウェイのみであるため、リソースのきめ細かいアクセス制御は実際には必要ありません。

カスタムオーソライザー

長所

  1. 認証メカニズムを希望どおりに設定できます。認証と承認に対する究極の制御。
  2. UIに標準トークン(JWT)を使用してAPIを呼び出させることができ、開発者のフローは同じままです。 AWSSDKに関する特別な考慮事項はありません。

短所

  1. 認証を構築するには、多くの思考と努力が必要です。
  2. いくつかの重要な側面を見逃す可能性は常にあります。
  3. それは車輪の再発明のようなものです。アマゾンがすでにあなたのためにそれをしているのに、なぜそれをするのですか?.

そうは言っても、私は今のところカスタムオーソライザーに傾いています。このトピックに関するアドバイスが必要です。

PS:私が投稿した質問に対する明確な答えはないことは知っていますが、アプリケーションの認証を決定しようとしている人々にとっては非常に役立ちます。

15
Prabhat

さて、認証とセキュリティは確かに困難であり、AWSセキュリティチームによって考えられ、対処されてきた多くの問題があり、考えたり実装したりしてアプリケーションを安全でなくする可能性があります。私はカスタム承認者を実装して、セッション内のすべてのリクエストで繰り返されるbase64でエンコードされた値である承認トークン(承認ヘッダーを介して渡される)を期待しました。 RC4とdiffiehellmanの弱点により、TLSが攻撃を受けやすくなっていることがわかりました。 IAMを使用して単にcognitoを使用する場合、AWSsigv4リクエスト署名はこれらの弱点からユーザーを保護します。詳細については、 https://www.youtube.com/watch?v=zmMpgbIhCpw をご覧ください。

Cognito/IAMを使用するもう1つの利点は、CSRFリプレイ攻撃からユーザーを保護することです。リクエストの署名には、タイムスタンプの使用が含まれます。 IAMは、5分以上前に署名されたリクエストをすべて拒否します。

要するに、可能であればカスタムオーソライザーの使用を避け、cognitoでIAMを使用してください。あなたはあなた自身に感謝するでしょう。

7
Prabhat

これは短い答えですが、両方を使用してみませんか?

CognitoユーザープールとCognitoフェデレーションIDを使用するために実際に実装されているカスタム承認者を使用します。

Cognitoを使用する場合、すべてを使用しないことを選択できます。

たとえば、カスタムオーソライザーを設定し、Lambdaは実際にCognitoユーザープールAPIを使用してユーザーを認証しています。 Cognitoユーザープールにすべてのパスワード、トークンなどを処理させます。

2
Yves M.