1

.NET MVC4 の上に構築された Backbone/RequireJS アプリケーションがあります。フォーム認証を使用して、バックエンド データ ストアに対してユーザーを認証していますが、これはうまく機能しています。

当社のサービス レイヤーは .NET Web Api プロジェクト (RESTful API) であり、トークン化された認証アプローチを使用しています (最初の要求には基本認証ヘッダーが含まれます。認証が成功すると、応答ペイロードには認証トークンが含まれます。後続の要求はトークンを渡します)。

私がよくわからないのは、サービスレイヤーに対して認証する方法です。認証ヘッダーを渡す必要があると確信していますが、JSにユーザー名/パスワードがないため、トークンを生成する方法がわかりません。

ここでフォーム認証を完全にバイパスし、単純に SSL 経由で ajax リクエストを行う必要がありますか? 同様に /Account/Login アクションに POST し、メンバーシップ プロバイダーを使用して資格情報を検証できます。成功した場合は、最初のリクエストに Auth ヘッダーを追加し、後続のリクエストに認証トークンを使用できます。

ここに認証ヘッダー/カスタム トークンを追加する例:

$.ajaxSetup({
    'beforeSend': function (xhr) {
        if($.cookie("AuthToken")) {
            xhr.setRequestHeader("CustomTokenHeader", $.cookie("AuthToken"));
        } else {
            var token = methodToBase64EncodeUsernamePassword(username, password);
            xhr.setRequestHeader("Authentication", "Basic " + token);
        }

    }
});
4

1 に答える 1

1

この解決策を見てください。これは、私が二度と見つけられないように見えるスクリーンキャストに基づいています。見つけたら、答えを更新します。ただし、ソリューションを簡単に追跡できるはずです。探しているのは PerRouteMHOwnershipSample です。ベスト プラクティスは、「ここではフォーム認証を完全にバイパスし、単純に SSL 経由で ajax リクエストを行う」ことだと思います。保護したい API ルートはすべてフィルタリングされ、アプリからトークンを渡してサーバーでデコードする必要があります。個人的には、フォーム認証を使用して API を保護することは考えていません。

于 2013-01-04T13:13:49.460 に答える