別のドメインの JQuery アプリによって使用される MVC3 Web API アプリケーションの認証に使用できるオプションは何ですか?
これが私がこれまでに試した制約/事柄です:-
- OAuth を使用したくありません。ユーザーベースが限られているプライベートアプリの場合、エンドユーザーが既存のプロバイダーにアカウントを持つことは期待できず、独自のプロバイダーを実装する余地はありません
- ヘッダーで渡されたデータを使用して、完全に機能する HMAC-SHA256 実装が正常に機能しました。ただし、IE8/9 の CORS が壊れており、ヘッダーを送信できないため、これは IE では機能しません。
- 消費するアプリが API とは別のドメインにあるため、クロスドメインが必要ですが、ヘッダーを使用できないため、jsonp を使用できません
- トークン (のみ) ベースのアプローチは避けたいと思います。
この時点で、URL またはクエリ文字列/ポストを使用してハッシュやその他の変数を提供する HMAC-SHA256 アプローチを採用しています。
これらの変数を URL に入れるのは汚いように思えますし、それらをクエリ文字列/投稿に入れるのは面倒です。
JQuery $.ajaxSetup beforeSend オプションを使用してハッシュを生成し、それをヘッダーに添付することに成功しましたが、前述したように、IE8/9 ではヘッダーを使用できません。
$.ajaxPrefilter に頼る必要がありました。これは、beforeSend で ajax データを変更できず、ajax のタイプに基づいてハッシュの値を動的に計算する必要があるため、$.ajaxSetup でデータを拡張することもできないためです。クエリ。メソッドに依存しない方法で必要な変数を追加するためのクリーンでシンプルな方法がないため、 $.ajaxPrefilter も問題です...つまり、GETの場合はquerystring、POSTの場合はformdataである必要があります
次のソリューションが見つからないため、何かが欠けているに違いありません:- a) クロスドメインをサポート a) MVC と JQuery の両方の側で大規模なハックではない c) 実際に安全 d) IE8/9 で動作する
これをきちんとやっている人がいるに違いない...
編集
明確にするために、API側の認証メカニズムは問題ありません...どの方法でリクエストを検証しても、GenericPrincipalを生成してAPIで使用します(これのメリットは別の投稿用ですが、使用できますMVCの標準的な承認メカニズム。私は自分自身で展開することを好みます... API の他の開発者が学習して維持することはあまりありません)
問題は主に、クライアントから API への認証情報の転送にあります:- - サーバー/API の状態に依存できません。したがって、1回の呼び出しでユーザー名/パスワードを渡し、トークンを取得してから、そのトークンを使用し続けることはできません(リプレイ攻撃の可能性があります)-IEは残りのようにXHRの代わりにXDRを使用するため、リクエストヘッダーの使用を必要とするものはすべてアウトですカスタムヘッダーをサポートしていません(IE10がXHRをサポートしていることは知っていますが、実際にはIE8 +のサポートが必要です)-HMACを生成してURLのどこかに渡す(パスまたはクエリ文字列)が行き詰まっていると思いますが、これこれ用に設計されていないリクエストの一部を使用しているため、ハックのようです-パスを使用すると、少なくとも各リクエストでユーザー名、タイムスタンプ、およびハッシュを渡す必要があるため、多くの面倒な解析があります。
悪いことですが、クエリ文字列/フォームデータが最良の選択肢のようです。ただし、各リクエストでこれらをキャプチャする方法を考え出す必要があります。MessageHandler または Filter を使用できますが、どちらもフォームデータにアクセスするための便利な方法を提供しません。
私は自分ですべての解析と処理を書くことができることを知っています(そしてそうするように見えます)が、要点は、これに対する解決策がまだないとは信じられないということです. (1) IE のサポート、(2) セキュアなコード、(3) クリーンなコードがあり、2 つしか選べません。