私たちの製品は私たちのサービスに新しいプレーヤーを登録し、それをAzure(私たちは.NETを使用しています)でホストすることを選択しました。
これは私が書いている最初のREST WSであるため、それが確実な解決策であるかどうかについてフィードバックを得たいと思いました。
アプリについて知っておくべきいくつかの仮定:
- ユーザーは、ユーザーのパスワードを要求せずに、匿名でサービスにログインします
- 水平スケーリングを可能にするには、WSは完全にステートレスである必要があります
- サードパーティのスヌーピングを防ぐためにHTTPS(SSL)を使用して接続しています
編集:
- ネイティブiOS / Androidデバイスを対象としています
- 私たちの主な懸念は、改ざんされていないクライアントのみがリクエストを送信できるようにすることです
そして抽象的な認証プロセス:
- クライアントは単純なハッシュ(UDID:Timestamp)を作成し、タイムスタンプを使用して基本的なアルゴリズムで暗号化します(たとえば、秘密鍵はハッシュの2番目の文字ごとです)
- クライアントはサーバーにUDID、タイムスタンプ、ハッシュを送信します
- サーバーはハッシュを再構築し、ユーザーから送信された暗号化されたハッシュを復号化します
- 2つが等しい場合-実際にクライアントから送信されたことがわかります(悪意のある送信者からではないことを願っています)
すべての入力/提案は素晴らしいでしょう-明らかに私がこの問題を処理しているのは初めてなので、私はそれを間違って設計したかもしれません。
ありがとう!
2回目の更新:
OAuthのセキュリティ仕様を読むと、クライアントとサーバーは秘密鍵を知っている必要があり、クライアントはユーザーのモバイルデバイス(ウェブアプリではなく)にローカルに保存されているため、私の質問に対する実際の回答はないようです。
OAuthセキュリティガイド(http://hueniverse.com/oauth/guide/security/)から:
OAuthを実装する場合、対称または非対称の共有シークレットの制限を理解することが重要です。クライアントシークレット(またはプライベートキー)は、サーバーがクライアントの身元を確認するために使用されます。WebサーバーなどのWebベースのクライアントの場合、クライアントの秘密(または秘密鍵)の機密を保持することは比較的簡単です。
ただし、クライアントがデスクトップアプリケーション、モバイルアプリケーション、またはブラウザーアプレット(Flash、Java、Silverlight)やスクリプト(JavaScript)などの他のクライアント側ソフトウェアである場合、クライアントの資格情報をアプリケーションの各コピーに含める必要があります。 。これは、クライアントシークレット(またはプライベートキー)がアプリケーションと共に配布される必要があることを意味し、継承によってセキュリティが侵害されます。
これは、そのようなアプリケーション内でのOAuthの使用を妨げませんが、サーバーがそのようなパブリックシークレットで持つことができる信頼の量を制限します。シークレットは信頼できないため、サーバーはそのようなアプリケーションを不明なエンティティとして扱い、アプリケーションに関する統計の収集など、信頼のレベルを必要としないアクティビティに対してのみクライアントIDを使用する必要があります。一部のサーバーは、このようなアプリケーションを禁止したり、さまざまなプロトコルや拡張機能を提供したりすることがあります。ただし、現時点では、この制限に対する既知の解決策はありません。