>背景
我在同一域下有两个网站。一个网站仅封装登录/帐户管理功能,另一个网站是真正的网站。
- LoginWeb - 只有 Login Page/css/images/javascript 文件夹允许匿名访问
-
AdminWebsite - 通过表单身份验证完全锁定,即即使是javascript/images/css文件夹也没有
<authorization><allow users=*>
我正在努力实现
的目标这是我正在尝试实现的工作流程,并且已经完成了其中的99%:
- 如果用户点击AdminWebsite上的任何页面,他将被FormsAuthentication发送回LoginWeb
- 用户在登录页中提供凭据,登录网站会发出表单身份验证票证。用户尚未登录到管理网站。(这样用户可以转到更改密码页面等并执行帐户管理功能)
- 用户在 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>
此站点"跨应用程序的窗体身份验证"意味着 Forms 属性上的"名称"应相同。