gpt4 book ai didi

asp.net - 正确创建跨域表单例份验证 cookie

转载 作者:行者123 更新时间:2023-12-04 12:33:35 24 4
gpt4 key购买 nike

我只是在两台服务器之间创建一个简单的测试。基本上,如果用户已经通过身份验证,我希望能够在应用程序之间传递它们。我更改了键以隐藏它们

我有三个问题:

  • 跨域应用程序验证 cookie 的正确方法是什么。例如,当用户登陆 successpage.aspx我应该检查什么?
  • 以下代码对于创建跨域身份验证 cookie 是否有效?
  • 我有我的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"/>

    最佳答案

    What is the proper way to validate the cookie across domain application. For example, when the user lands at successpage.aspx what should I be checking for ?



    应该没有什么要检查的。表单验证机制会从 cookie 中检索票证,检查它是否有效。如果不存在或无效,用户将重定向到 ~/Default.aspx 。
    如果您的 cookie 与您的 web.config 的配置相匹配,这将工作

    Is the below code valid for creating a cross domain authentication cookie ?



    我认为您不应该尝试通过手动处理 cookie 来覆盖 web.config 的设置。我认为有更好的方法来处理 cookie 持久性(请参阅下面的 web.config),而您只是在实现 Forms 身份验证 API 的一部分(例如,为 SSL 失去 web.config)
  • 在这里,您的手动 cookie 不是 HttpOnly :例如,您可能会通过 XSS
  • 遭受 cookie 盗窃
  • FormsAuthentication 有自己的 cookie 处理方式(参见 http://msdn.microsoft.com/en-us/library/1d3t3c61%28v=vs.80%29.aspx 中的 TimeOut 属性描述) 您的 cookie 持久性机制将被此自动行为覆盖

  • 您的代码应该是:
    if (authenticated)
    {
    bool isPersistent = whateverIwant;
    FormsAuthentication.SetAuthCookie(userName, isPersistent );
    Response.Redirect("successpage.aspx");
    }

    Do I have my web.config setup properly?



    domain属性应该没问题,只要你想在mydomain.com的直接子域之间共享身份验证(不适用于x.y.mydomain.com),并且mydomain.com不在公共(public)后缀列表中(http://publicsuffix.org/list/ )

    我会将超时和slidingExpiration 属性更改为:
     <forms loginUrl="~/Default.aspx" timeout="525600" slidingExpiration="false" name=".AUTHCOOKIE" domain="myDomain.com" cookieless="UseCookies" enableCrossAppRedirects="true"/>

    我想这是处理一年持久 cookie 和 session cookie 之间选择的好方法。有关详细信息,请参阅 https://stackoverflow.com/a/3748723/1236044

    关于asp.net - 正确创建跨域表单例份验证 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15076138/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com