7

私はサービス指向アーキテクチャーを設計していますが、クライアントを認識してリソースにアクセスできるようにするために、認証サービスも必要です。

実際、私は2つの可能な解決策を見つけました。

  • pubkeyとprivatekeyを使用して各リクエストに署名します
  • pubkeyとprivatekeyを使用したトークンベースの認証

私はoauth2サービスを想定していません。それは、私のニーズに合わせてシステムを設計するためのオーバーヘッドが多すぎるためです。代わりに、より単純な(しかし強力な)認証ソリューションを採用することを好みます。

したがって、ここにAuthenticationService、APIリクエストを行うクライアント(リクエストと一緒に渡すトークンを取得する)によってクエリされるか、リクエストに署名したHMACの逆チェックを実行するために各単一のAPIエンドポイントによってクエリされることができます。一致するかどうかを確認します(HMACの生成に使用された秘密鍵が有効かどうかを確認します)。

最終的な開発者がいくつかの操作を実行する場合、最新のものの方が簡単であることがわかりますが、トークンを検証してその有効期限を処理するには、さらに多くのチェックが必要になります...

トークンソリューションは、単一要求HMACでは発生しない潜在的なセキュリティ問題を発生させる可能性がありますか?あなたは何を好みますか、そしておそらく、なぜですか?

4

1 に答える 1

7

最後に、私はついに同じAmazonソリューションに基づいた認証サービスを設計しました。ユーザーは秘密鍵を使用して各リクエストに署名する必要があります。したがって、リクエストは値「PUBKEY:SIGNATURE」のAuthorizationヘッダーを送信します。ここで、署名は、Dateヘッダー内で渡される任意のリクエストデータ(リクエストの本文自体である可能性があります)とタイムスタンプで構成されるHMACです。この実装は、MITMおよびリプレイ攻撃を回避するのに十分強力です。

このソリューションの詳細については、実際の実装を理解するのに大いに役立つ素晴らしい説明があります

これが同じ問題に直面している世界の他の誰かに本当に役立つことを願っています。

于 2012-10-03T19:16:25.330 に答える