7

2 つのサーバー間で簡単なテストを作成しているだけです。基本的に、ユーザーがすでに認証されている場合、アプリケーション間でそれらを渡すことができるようにしたいと考えています。それらを隠すためにキーを変更しました

3 つの質問があります。

  1. ドメイン アプリケーション全体で Cookie を検証する適切な方法は何ですか。たとえば、ユーザーがどこにたどり着いたとき、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

1 に答える 1

4

ドメイン アプリケーション全体で Cookie を検証する適切な方法は何ですか。たとえば、ユーザーが successpage.aspx にたどり着いたとき、何を確認する必要がありますか?

チェックするものは何もないはずです。フォーム認証メカニズムは、Cookie からチケットを取得し、有効かどうかを確認します。存在しないか無効な場合、ユーザーは ~/Default.aspx にリダイレクトされます。これは、Cookie が web.config の構成と一致する場合に機能します。

次のコードは、クロス ドメイン認証 Cookie の作成に有効ですか?

Cookie を手動で処理して web.config の設定をオーバーライドしようとするべきではないと思います。Cookieの永続性を処理するためのより良い方法があると思います(web.configについては以下を参照)。フォーム認証APIの一部を実装しているだけです(たとえば、SSLのweb.configを失います)

  1. ここでは、手動の Cookie は HttpOnly ではありません。たとえば、XSS による Cookie の盗難の対象になる可能性があります。
  2. FormsAuthentication には、Cookie を処理する独自の方法があります ( 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 の直接のサブドメイン間で認証を共有したい限り (xymydomain.com では機能しません)、mydomain.com がパブリック サフィックス リスト ( http: //publicsuffix.org/list/ )

timeout および slideExpiration 属性を次のように変更します。

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

1 年間の永続的な Cookie とセッション Cookie の間の選択を処理するのは良い方法だと思います。詳細については、 https://stackoverflow.com/a/3748723/1236044を参照してください。

于 2013-03-04T10:14:38.590 に答える