0

背景

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

  • LoginWeb - 只有登录页面/css/images/javascript 文件夹允许匿名访问
  • AdminWebsite - 通过表单身份验证完全锁定。即甚至 javascript/images/css 文件夹都没有<authorization><allow users=*>



想要达到的目标这是我想要达到的工作流程,并且已经完成了 99% 的工作:

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

99% 已经正常工作
这是 LoginWeb 中的代码,它试图为 AdminWeb 发出 FormsAuth 票证,但它不工作。即 AdminWeb 仍在将我重定向回登录。我确定我缺少一些非常微不足道的东西,但我无法弄清楚它到底是什么?????????

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 部分:
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>


管理网站

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

1 回答 1

0

这个站点,Forms Authentication Across Applications,暗示表单属性上的名称应该相同。

于 2012-05-30T00:07:10.277 回答