次の認証のアイデアについてフィードバックをお願いします。それは理にかなっており、これを行う(または同様の)標準的な方法があるので、十分にテストされた実装に依存できます。
サーバーへの通信をセキュリティで保護する方法については、ここで多くの回答を見てきました。ほとんどの回答は、単にTLSを適切に使用することです。メッセージ自体の暗号化と署名を可能にするソリューションを探しています。そのため、メッセージは宛先サービスに到達するまで、バックエンドを通過しても安全です。
コンテキスト
認証
Tlsが使用されている場合、これらの要求はリプレイ攻撃から安全であるため、攻撃者がメッセージをリプレイして新しいトークンを取得するリスクはありません。
その他のAPI呼び出し
質問
ありがとう
私が何かを見逃していない限り、あなたのソリューションはセキュリティトークンサービスのように見えます。 STSの場合、鍵となるのは、信頼できる当事者が、信頼する当事者の開始当事者を識別することです。あなたの場合、信託ブローカーと依拠当事者は同じエンティティであるように見えます。
信頼を最終的な宛先に伝播させることが目的の場合は、プロキシ経由でSSLを使用し、クライアント証明書を使用してエンドポイントを識別します。トラフィックを検査するためにHTTPがプロキシを通過することを想定している場合、標準のSTSを実装します。
Xanderが言ったように、RESTは軽量のサービス呼び出しに最適ですが、セキュリティを実現したいときはSOAP、特にWS-Security拡張を使用する必要があります。それはそれほど難しくありません。特に、あなたがそうするように両端を制御している場合。これを行う方法については、これを参照してください スタックオーバーフローの質問 AndroidのJava=)。
ホームベークソリューションを続行する場合は、認証の最後の3つの箇条書きが弱点になっていることに注意してください。
詳細を確認したとは言えませんが、HTTPレベルでメッセージレベルのセキュリティを実装する既存の試みに興味があるかもしれません。例えば:
HTTPSec :プロジェクトはhttpsec.org
が消えました。それは Webアーカイブからまだ入手できます (このドキュメントは、GNU FDL下で入手できます)この仕様を開発したSecartaは、非フリーのJava実装を提供するためにも使用されました。
どちらのプロジェクトもアクティブではないようです。また、他のセキュリティプロトコルが通常持っている、または持っているべきである専門家の精査が欠けている場合もあります。彼らに何か問題があると言っているのではありません。 HTTPsecの成功の欠如は、 "SOAP vs REST wars"(RESTサイド)そしてそれは非フリーライセンスで(Javaで)1つの実装しかなかったという事実。
OpenPGPなどの既存のツールを使用してメッセージエンティティを暗号化および署名することが重要かどうかを調査します。
RESTは、人によって意味が異なるWordです。 SOAPの複数のレイヤーなしで、HTTP上のペイロードを意味する場合もあります。そのようなサービスが実際に HATEOS原則 に従うかどうかは別の問題です。
これに対する私の個人的な意見は、RESTの無国籍性は、必ずしもアプリケーションのセキュリティの側面ではなく、アプリケーションのコア機能に適用する必要があります。もちろん、防止することは(不可能ではないにしても)非常に困難です。受信者側でなんらかの状態を維持せずに攻撃を再生します。
とはいえ、純粋なメッセージレベルのセキュリティに関心があるかどうかは、質問からわかりません。むしろ、クライアントからバックエンドへの直接TCP接続を実行できないため、HTTP経由でSSL/TLSに相当するものをトンネリングすることに主に関心があるようです。 SSL/TLSも使用しています。これは、ロードバランサーを信頼していないことが主な理由であることを示しています。独自のプロトコルを作成することは一般的に難しく、多くの場合悪い考えです。暗号化とMACアルゴリズムに関する推奨事項は、 (比較すると、TLSのいくつかの問題が特定されて対処されるまでにはしばらく時間がかかりましたが、詳細な仕様を備えたオープンなプロトコルであり、多くの専門家によって研究されています。)