2013-02-25 13 views
7

私はちょうど2つのサーバー間で簡単なテストを作成しています。基本的に、ユーザーがすでに認証済みの場合、アプリケーション間でユーザーを渡すことができるようにしたいと考えています。私は3つの質問を持っている彼らにクロスドメインフォーム認証クッキーの適切な作成

を非表示にするには、キーを変更:

ドメインアプリケーション全体でクッキーを検証するための適切な方法は何ですか
  1. 。たとえば、ユーザーがsuccesspage.aspxになったとき、何を確認する必要がありますか?
  2. 以下のコードは、クロスドメイン認証Cookieの作成に有効ですか?
  3. web.configは正しくセットアップされていますか?

マイコード:

if (authenticated == true) 
{ 
    //FormsAuthentication.SetAuthCookie(userName, false); 
    bool IsPersistent = true; 
    DateTime expirationDate = new DateTime(); 
    if (IsPersistent) 
    expirationDate = DateTime.Now.AddYears(1); 
    else 
    expirationDate = DateTime.Now.AddMinutes(300); 

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
     1, 
     userAuthName, 
     DateTime.Now, 
     expirationDate, 
     IsPersistent, 
     userAuthName, 
     FormsAuthentication.FormsCookiePath); 

    string eth = FormsAuthentication.Encrypt(ticket); 
    HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, eth); 
    if (IsPersistent) 
    cookie.Expires = ticket.Expiration; 

    cookie.Domain = ".myDomain.com"; 
    Response.SetCookie(cookie); 
    Response.Cookies.Add(cookie); 

    Response.Redirect("successpage.aspx"); 
} 

マイ設定:

<authentication mode="Forms"> 
    <forms loginUrl="~/Default.aspx" timeout="2880" name=".AUTHCOOKIE" domain="myDomain.com" cookieless="UseCookies" enableCrossAppRedirects="true"/> 
</authentication> 
<customErrors mode="Off" defaultRedirect="failure.aspx" /> 
<machineKey decryptionKey="@" validationKey="*" validation="SHA1" decryption="AES"/> 

答えて

4

ドメインアプリケーション間でクッキーを検証するための適切な方法は何ですか。 たとえば、ユーザーがsuccesspage.aspxに到着したら、何を確認する必要がありますか?

チェックする必要はありません。フォーム認証メカニズムは、Cookieからチケットを取得し、有効かどうかをチェックします。存在しない、または無効な場合、ユーザーは〜/ Default.aspxにリダイレクトされます。 これは、はあなたのクッキーはあなたのweb.configファイルの設定

と一致して動作するクロスドメイン認証クッキーを作成するための以下のコード有効ですか?

クッキーを手動で処理してweb.configの設定を上書きしないでください。私はクッキーの永続性(web.configファイルは以下を参照)を処理するためのより良い方法があると思いますし、あなただけのフォーム認証APIの一部を実装している、ここで

  1. あなたの取扱説明書を(たとえばSSL用のweb.configファイルを失います)クッキーはHTTPのみではありません:あなたはたとえばXSSによるクッキーの盗難を受ける可能性が
  2. をFormsAuthenticationクッキーあなたのクッキーの永続性メカニズムは、この自動動作によって上書きされます(http://msdn.microsoft.com/en-us/library/1d3t3c61%28v=vs.80%29.aspxでtimeout属性の説明を参照)を処理する独自の方法を持ってい

コードは次のとおりです。

if (authenticated) 
{ 
    bool isPersistent = whateverIwant; 
    FormsAuthentication.SetAuthCookie(userName, isPersistent); 
    Response.Redirect("successpage.aspx"); 
} 

私はきちんと私のweb.configファイルのセットアップを持っていますか?

mydomain.comの直接サブドメイン(x.y.mydomain.comでは機能しません)とmydomainの間で認証を共有したい場合は、domain属性で問題ありません。comが公共の接尾辞リストにない(http://publicsuffix.org/list/

私はタイムアウトを変更するだろうし、slidingExpiration属性へ:

<forms loginUrl="~/Default.aspx" timeout="525600" slidingExpiration="false" name=".AUTHCOOKIE" domain="myDomain.com" cookieless="UseCookies" enableCrossAppRedirects="true"/> 

私はそれが一年永続的なCookieとセッションの間の選択を処理するための良い方法だと思いますクッキー。詳細はhttps://stackoverflow.com/a/3748723/1236044を参照してください。

+0

v4.5のWebサイトでVS 2013にフォーム認証を設定し、ドメインを「acme.com」に設定しました。 site1.acme.comにアクセスし、認証するとクッキーが設定されますが、Firebugではクッキーは私が思っていたようにacme.comではなくsite1.acme.comドメインに保存されます。 私が想定したことは、ブラウザがsite1.acme.comとsite2.acme.comの両方の要求に応じて認証クッキーを送信し、両方のマシンキー設定が同じであるためです確かに私の場合は起こっていない。私が間違っているアイデアは? – Jacques

関連する問題