2

ASP.NETでユーザーを認証するために、私はこのようなコードを見てきました

if (loginManager.Authenticate(username, password))
{
    Session["Authenticated"] = 1;
}

後続のリクエストでは、の値Session["Authenticated"]が1であるかどうかを確認して、現在のユーザーが認証されているかどうかを判断します。

これは非常に簡単です。私の質問は、これはASP.NETフォーム認証とどのように違うのですか?-FormsAuthenticationクラスを使用して認証Cookieを作成し、User.Identity.IsAuthenticatedフィールドに基づいてユーザーが認証されているかどうかを判断しますか?

4

3 に答える 3

1

セッションCookieとセッションの有効期限が同期している場合、おそらく違いはありません。しかし、これは常に当てはまるわけではありません。ほんの一例です-セッションをASP.NETのデフォルトで保存します-InProc。しかし、何らかの理由で、SessionStateプロセスが再起動され、強制終了され、停止されます。すべてのセッションが失われます。次に、ユーザーがサイトにアクセスします。ユーザーは有効なAuth cookieを持っており、認証されています。ただし、セッションを取得できないため、new(Session.IsNewSession = true)として再作成されます。したがって、ユーザーはFormsAuthenticationに従って認証されますが、Session ["Authenticated"]=1にはなりません。

私はこの記事がこの問題に関して非常に役立つことを発見しました:http ://www.abstraction.net/ViewArticle.aspx?articleID = 74

ユーザーの認証トークンと彼のセッションの間に依存関係がありますか?

理想的には、答えはノーでなければなりません。関心の分離など、さまざまな理由から、セキュリティ関連の問題に利用できるセッションデータに依存しないでください。1つのトークンはユーザーのアクセス権を扱い、もう1つのトークンはリクエスト間でユーザーデータを保存します。ただし、多くの場合、開発者はユーザーのアクセス権をセッションに保存することを選択します。ほとんどの場合、匿名アクセスと認証アクセスの両方を許可するサイトに保存し、認証ユーザーは匿名ユーザーよりも多くの機能/ページを使用できます。したがって、開発者は、ユーザーの認証Cookieにアクセス権トークンを保存する代わりに、ユーザーのセッションにユーザーのアクセス権を保存することを選択します(ただし、セキュリティの問題と見なされる場合もありますが、これは一般的に誤った懸念事項です。ユーザーの認証トークンは、web.configのforms要素の保護属性を介して非常に簡単に非常に強力に暗号化できます。ただし、これは、認証前にセッションが期限切れにならないことを前提としています。そうしないと、アクセス権が現在なくなっているセッションに保存されているため、実際にはアクセス権を知らない認証済みユーザーが残ります。。この依存関係に直面した場合、多くの開発者は、セッションタイムアウトを認証タイムアウトよりも高い値に設定し、フォーム認証のslidingExpirationをtrueに設定するだけで十分だと考えています。この設定では、ユーザー認証が最初に期限切れになり、ASP.Netがこれを自動的に処理し、ユーザーをログインページ(web.configで設定されている)にリダイレクトするという考え方です。セッションがまだ存在する場合は更新され、そうでない場合は新しいセッションが作成され、ユーザーのログインに従ってユーザーのアクセス権が設定されます。

于 2012-06-23T13:46:54.320 に答える
0

SessionIDセッションはFormsAuthenticationクラスを介して設定されたを使用して識別されるため、セッションを使用した認証は標準でもグッドプラクティスでもありません。このクラスは、Cookieを使用するか、Cookieが無効になっている場合は、ユーザーのURLを書き換えて維持することにより、ユーザーとサーバーのセッションバインディングを維持しますSessionID。セッションが失われたり危険にさらされたりする可能性がありますが、SessionIDメカニズムは暗号化とすべての要求のチェックによって保護されています。この議論を支持する理由は他にもたくさんあります。つまり、標準的な方法を使用することをお勧めします。

于 2012-06-23T06:10:00.793 に答える
0

いくつかの理由から、フォーム認証を使用する必要があります。

  1. フォーム認証は、長年にわたってマイクロソフトによって開発されてきました。その安全性をテストしました。あなたの方法はテストされたことがないので、あなたも私もそれが安全かどうか確信が持てませんが、フォーム認証はすべての人に信頼されています。
  2. 人々は、セッションが時間の前に期限切れになることに多くの苦労をしています。
  3. 多くの同時ユーザーがWebサイトにアクセスしている場合、セッションを使用するとメモリの問題が発生します。
  4. フォーム認証を使用すると、よりクリーンでエレガントになります。
  5. 多くの開発者が使用するアプローチを使用してみませんか。明日誰かがあなたのチームに加わり、あなたのプロジェクトを手伝うと、彼はあなたの論理を誤解し、セキュリティを危険にさらす可能性があります。
于 2012-06-23T12:54:52.270 に答える