asp.net 2.0 - 4.0 中的双重形式身份验证

本文关键字:身份验证 net asp | 更新日期: 2023-09-27 18:35:45

>背景

我在同一域下有两个网站。一个网站仅封装登录/帐户管理功能,另一个网站是真正的网站。

  • LoginWeb - 只有 Login Page/css/images/javascript 文件夹允许匿名访问
  • AdminWebsite - 通过表单身份验证完全锁定,即即使是javascript/images/css文件夹也没有<authorization><allow users=*>


我正在努力实现
的目标这是我正在尝试实现的工作流程,并且已经完成了其中的99%:

  1. 如果用户点击AdminWebsite上的任何页面,他将被FormsAuthentication发送回LoginWeb
  2. 用户在登录页中提供凭据,登录网站会发出表单身份验证票证。用户尚未登录到管理网站。(这样用户可以转到更改密码页面等并执行帐户管理功能)
  3. 用户在 LoginWeb 中再执行两个步骤,现在可以向 AdminWebsite 颁发 FormsAuth 票证并重定向到它。

99% 已经在工作
这是LoginWeb中的代码,它尝试为AdminWeb发出FormsAuth票证,但它不起作用。即管理网站仍在将我重定向回登录。我确信我错过了一些非常微不足道的东西,但我无法弄清楚它到底是什么?????????

public void SetAuthenticationTicket(string username)
{
    MachineKeySection sec=(MachineKeySection)WebConfigurationManager.OpenWebConfiguration("").SectionGroups["system.web"].Sections["machineKey"]; 
    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
        username,
        DateTime.Now,
        DateTime.Now.AddMinutes(30),
        false, //true or false
        sec.DecryptionKey, //Custom data like your webkey can go here
        FormsAuthentication.FormsCookiePath);
    var encryptedTicket = FormsAuthentication.Encrypt(ticket);
    var cookie = new HttpCookie("ADMINWEB", encryptedTicket)
    {
        Path = FormsAuthentication.FormsCookiePath,
        Domain = "xxx.com"
    };
    Response.AppendCookie(cookie);
}

这些是我的表单身份验证的web.config部分:
登录网

  <machineKey validationKey="XXXXXX" decryptionKey="XXX" validation="SHA1"/>
  <authentication mode="Forms">
    <forms name="LoginWeb"
            domain="xxx.com"
            loginUrl="~/account/Logon"
            timeout="1440"
            cookieless="UseCookies"
            slidingExpiration="false"
            protection="All"
            path="/"/>
  </authentication>


管理网站

   <machineKey validationKey="XXXXXX" decryptionKey="XXX" validation="SHA1"/>
  <authentication mode="Forms">
    <forms name="ADMINWEB"
            domain="xxx.com"
            loginUrl="http://loginweb/account/Logon"
            timeout="1440"
            cookieless="UseCookies"
            slidingExpiration="false"
            protection="All"
            path="/"/>
</authentication>
<authorization>
    <deny users="?"/>
</authorization>

asp.net 2.0 - 4.0 中的双重形式身份验证

此站点"跨应用程序的窗体身份验证"意味着 Forms 属性上的"名称"应相同。