2009-04-03 15 views
7

ASP.NETアプリケーションで提案されている要件の1つは、セッション状態がグローバルに無効になっていることです。 (これは交渉可能ではありません)ASP.NETでセッション状態のないユーザー認証

もう1つの要件は、ユーザー認証のための手段があることです。私はASP.NETのメンバシッププロバイダモデルを使用することを考えています。

セッション状態なしでユーザー認証を行うことは可能ですか?

我々が探している特定のユーザー認証の例は以下のとおりです。

  • ユーザーは
  • ユーザーが自分のセッションの残りの登録情報(連絡先フィールドなど)
  • に入り、認証されていないウェブサイトに行きますユーザーは登録済みのステータスのため、特定のコンテンツにアクセスできます

クッキーでこれを行う方法はありますか?

これは安全に実行できるので、クッキーは簡単にスプーフィングできませんか?

これをサポートするためにASP.NETに組み込まれている機能はありますか、独自の方法を使用する必要がありますか?

答えて

12

ASP.NETフォーム認証では、SessionStateは使用されません。 Cookieを使用して認証チケットを格納します。

web.configファイルを編集して、SSLチャネルを介して認証チケットを送信することもできます。

必要なすべての機能は、ASP.NETに組み込まれています。

http://msdn.microsoft.com/en-us/library/aa480476.aspx

+0

偉大な...私はvalidationKeyが必要と思われ、decryptionKeyはこれが動作するためには、Webファーム上のすべてのサーバ上で同一である必要があります。 Webファームにいる場合は – frankadelic

+0

、はい。 –

0

はい、Cookieを使用することができます。

クッキーの問題は、多くのデータを永続化できないことです。ウィザードのタイプの登録では、データベースにデータを格納し、行キー/ Idを暗号化されたCookieに格納します。この方法で、ユーザーが次のステップに移動すると、データベースからデータを取得できます。

クッキーについては、クッキー値をタイムスタンプして暗号化することができます。私は通常、ユーザーの認証状態を管理しません。組み込みのFormsAuthenticationクラスを使用して、Webアプリケーションのその側面を管理します。

MyspaceやLive Search Clubなどの大規模なサイトで、Cookieのみを状態管理として使用しています。

2

確かに、クッキーがこれを行います。

ファンダメンタルズを考えてください。セッション状態はCookieによって管理されます。

あなたがしていることは次のとおりです。

ユーザーがログインするときには、ユーザーIDとタイムアウトを取得します(ログインは30分間など)。

その文字列を取り、ハッシュします。

(javaのではなく、重要なカントー)

String cookie = userid + ":" + timeString + ":" + md5(userid + ":" + timeString + ":" + "secretpassword"); 

その後、要求がサイトにヒットしたときに、クッキーを確認してください。まず、完全性をチェックします。

String parts[] = cookie.split(":"); 
String newHash = md5(parts[0] + ":" + parts[1] + ":" + "secret password"); 
if (!newHash.equals(parts[2])) { 
    // boom, cheater! 
} 

次に、「文字列」がまだ「ログインしている」かどうかを確認し、そこから移動します。

リクエストごとにCookieを更新するのに時間がかかるかどうかを確認してください。

+1

これはかなり賢明ですが、セキュリティは賢明です。誰かがアプリにログインできるようになると秘密のパスワードが漏れた場合。それが弱ければ(特にMD5がフェードアウトしている間に)クラックすることがあります。あなたがこの方法でやりたいのであれば、少なくともすべてのユーザーに異なる「秘密」を使用してください。それははるかに安全です。 –

+0

認証セッションごとに異なるユーザーごとのキーをどのように管理しますか? – yfeldblum

+0

これは鍵となる制御上の問題です。暗号化にも同じ問題があります。 MD5が好きではなく、SHAを選んでください。それは技術の一例です。 –

関連する問題