15

私の会社は、MVC4の新しいWebAPI / SPA機能を使用して、eコマースサイトをシングルページアプリケーションとして書き直しています。認証を処理する最善の方法がわかりません。

具体的な質問:

  1. 暗号化された通信と暗号化されていない通信の両方をどのように処理しますか?明らかに、ログイン、アカウント、およびチェックアウトAJAXにHTTPSを使用する必要がありますが、サイト全体の速度を低下させる高価なSSLハンドシェイクを回避するために、カタログの閲覧にHTTPを使用したいと思います。これはSPAでも可能ですか、それともすべてにHTTPSを使用していますか?

  2. どのような認証を使用する必要がありますか?主に当サイトはウェブブラウザからアクセスするため、クッキーで問題ない場合があります。しかし、将来的には、カスタムiPhoneアプリを作成したいと思うかもしれません。基本認証、OpenId、またはOAUTHが望ましいですか?もしそうなら、なぜですか?

    1. Forms AuthとCookieを使用する場合、MVC 4のリリースでリダイレクトの問題は修正されますか、それともhaackを使用する必要がありますか?
    2. 基本認証を使用する場合、ユーザーがページに再度アクセスするたびにログインする必要がないように、永続的なセッションをどのように実行しますか。
    3. ASP.NET MVC4で十分にサポートされている認証方法はどれですか。多くの特殊なコードを記述する必要がないことが理想的です。

前もって感謝します

4

3 に答える 3

10

1. 暗号化された通信と暗号化されていない通信の両方をどのように処理しますか? スパで https という 1 つのプロトコルに固執していませんか?

1 つのプロトコルにこだわる必要はありません。スパでは、ajax を使用して、http または https のいずれかをいつでも選択して通信できます。人の名前、生年月日、ログイン資格情報などの機密情報を送信するときはいつでも https を使用します。

ユーザーが https 経由でサイトにログインすると、サーバーはそのユーザーのフォーム認証 Cookie を設定できます。この Cookie は、セッションをサーバーに結び付ける暗号化された値である必要があります。サイトの残りの部分で http を使用している場合、この Cookie がプレーン テキストで送信されるリスクがあることに注意してください。選択した暗号化アルゴリズムを使用して Cookie の内容を暗号化することはできますが、悪意のある人物がこの Cookie を盗み、ユーザーのセッションをジャックする可能性があります。

ただし、サイトの閲覧とショッピング カートの作成のみが許可されている場合、これは大したことではないかもしれません。ユーザーがチェックアウトする準備ができたら、悪意のあるユーザーではないことを確認するための一種の二重チェックとして、https 経由でユーザーを再認証する必要があります。アマゾンはこれを行います。

2. どのような認証を使用すればよいですか?

まあ、それはあなたのサイトにどんな機能を持たせたいかという問題です.

OAuth他のサイトが委任されたアクセスで呼び出すことを許可できる Web サービスを公開するためのものです。これが意味することは、別のサイト (サイト x) が自分のプロファイルでサイトの機能にアクセスできるようにしたいユーザーがいる場合です。サイト x は、ユーザーを認証するサイトの oauth エンドポイントにユーザーをリダイレクトできます。oauth エンドポイントは、特定の機能がサイト x と共有されても問題ないかどうかをユーザーに尋ねます。ユーザーが同意すると、トークンが生成されます。ユーザーはこのトークンをサイト x に渡します。サイト x は、サイトに対してサーバー間呼び出しを行います。サイト x は呼び出しでトークンを提示するため、サービスへの呼び出しは委任されたアクセス呼び出しになります。OAuth は、サービスへの委任アクセスを作成するために他のサイトをプロビジョニングする方法です。私はそれを明確に説明できたことを願っています.. 私はいつもこれが得意というわけではありません.

OpenIDは、認証を処理するための安全な方法ではありません。ユーザーがサイトにアカウントを登録するのに煩わされる必要がないように、より便利です。OpenID は完全にオープンであるため、別のプロバイダーを信頼してユーザーを検証することになります。サード パーティ プロバイダーのユーザー ストアが侵害された場合、ユーザーも侵害されます。これは、OpenID プロバイダーに保証してもらうことができれば、基本的にあなたが誰であるかを信頼すると言っているバウチャー システムの例です。

別のソリューションはWS-Federationです。WS-Federation は、複数のサイトがあり、信頼できる 1 つの認証プロバイダーが必要な場合に使用します。この認証プロバイダーはあなたのものである可能性があり、基本的にすべてのサイトは、私のサイトにアクセスしたい場合は、最初に私の認証プロバイダーで認証を受ける必要があると言います. この認証プロバイダーは、別のドメインに存在することができ、選択した任意の認証メカニズムを選択できます。あなたは、この認証プロバイダーがユーザー アカウントを管理するために最善を尽くしてくれることを信頼しています。

ただし、サイトでの認証のみが必要で、複数のサイトがない場合は、WS-Federation はやり過ぎになる可能性があります。その場合、フォーム認証を行うことをお勧めします。これは簡単に実行できるはずです。これを行う方法の例はたくさんあり、マイクロソフトはこれを行う方法について多くのソリューションを提供しています。カスタム メンバーシップ プロバイダーの作成を検討する必要があります。


ユーザーがサイトで認証されたら、フォーム認証 Cookieを作成する必要があります。この Cookie は、ユーザーをサーバー上のセッションに関連付けます。これは、上記のすべてのシナリオに当てはまります。MVC 4 は、上記のすべてのシナリオもサポートしています。

ありがとうございます。私が十分に明確でない場合は、お気軽にさらに質問してください。

** 編集 12/1/2017 ** 数年後、この質問に戻って、REST ベースの API を Cookie に依存するのは得策ではないことを知りました。アプリのスケーリングが難しくなるため、Web アプリケーションでセッションを作成したくありません。そのため、認証が必要な場合は、何らかの形式の認証 (BASIC、DIGEST、トークン ベースなど) で HTTPS を使用します。そのため、SPA クライアント アプリはすべての http 要求に Authorization ヘッダーを設定し、Web サーバー アプリはすべての要求を再認証します。

于 2013-03-23T17:57:30.317 に答える
0

ASP.NET のフォーム ベースのセキュリティを使用することの主な欠点は、認証が失敗したときに 401 Web ページが必要であると想定していることです (AJAX 呼び出しを行っている場合は役に立ちません)。スパ パターン。ハッキングすることはできますが、使用目的に合わせて設計されていません。

このツールキットは、ASP.NET の代替フォーム モデルを提供する場合があります。成熟度はまだわかりません...

http://www.fluentsecurity.net

フィードバック歓迎。

于 2013-02-20T06:11:47.257 に答える
-1

私は自分でwebapiを使い始めたばかりなので、私の答えを信頼できるとは考えないでください。私はセキュリティの専門家ではありませんが、専門家であるべきです。私はあなたがしたのと同じ質問に出くわし、あなたがしたように、信頼できる答えないことを発見しました-とにかく mvc webapi 内で。他の webapi 仕様を見ると、インスピレーションが得られるかもしれません。

私が遭遇した最も簡単な方法は、もちろん SSL を使用することでした。これにより、ヘッダーのクリア テキストで資格情報を送信することを回避できます。休みを取りません。

私のAPIはSSLをずっと採用していますが、とにかく倍増したかったのです。そのため、すべてのリクエストに対してクエリ文字列で暗号化されたキーを送信しています。Cookie を使用しない認証が API 以外の ASP サイトで機能する方法とほぼ同じですが、mvc はそれを使用しないため、独自のソリューションを作成しました。

モバイル サイトでは、ユーザーは js にエンコードされた暗号化されたキーを使用してアプリにログインし、リダイレクトされます。したがって、彼は最初にサイトの Cookie ベースの認証を取得し、サイトの保護、パスワードの保存などを担当します。

別の API コンシューマは、開発サイトからまだ作成されていないより永続的な「シークレット」を取得し、それを使用してキーをチェックアウトします。

通常、mvc 認証はステートレスです。つまり、チケットがサーバー側で無効になることはありません。クライアントを制御している場合は、サーバーがログアウトした場合に無効化された Cookie 要求を無視して、チケットを再利用し続けることができます。最終的に、チケットのサーバー側を追跡したいと思うかもしれませんが、それはステートレスではなく、安静かどうか疑問であり、その結果、スケーラビリティーが打撃を受けました。しかし、認証はかなり重要なので...

于 2012-06-01T06:51:00.730 に答える