asp.net 2.0 - 4.0中的双窗体身份验证

时间:2012-05-29 22:14:50

标签: c# asp.net-mvc forms-authentication formsauthenticationticket

背景

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

  • LoginWeb - 只有登录页面/ css / images / javascript文件夹允许匿名访问
  • 管理员网站 - 通过表单身份验证完全锁定。即使是javascript / images / css文件夹也没有<authorization><allow users=*>


我想要实现的目标
这是我正在努力实现的工作流程,并完成了99%的工作流程:

  1. 如果用户点击 AdminWebsite 上的任何页面,他将被FormsAuthentication
  2. 发送回 LoginWeb
  3. 用户在登录页面中提供凭据, LoginWeb 网站会发出表单身份验证票证。用户尚未登录 AdminWebSite 。 (这样用户可以转到更改密码页面等并执行帐户管理功能)
  4. 用户在 LoginWeb 中再执行两个步骤,现在可以为 AdminWebsite 颁发FormsAuth票证并重定向到它。
  5. 99%已经工作
    这是LoginWeb中的代码,它尝试为AdminWeb颁发FormsAuth票证,但它无法正常工作。即AdminWeb仍然将我重定向到Login。我确信我遗失了一些非常微不足道的东西,但我无法弄清楚到底是什么??????????

    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);
    }
    

    以下是Forms Auth的web.config部分:
    LoginWeb

      <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>
    


    AdminWebSite

       <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>
    

1 个答案:

答案 0 :(得分:0)

此网站Forms Authentication Across Applications表示表单属性上的名称应该相同。