背景
我在同一个域下有两个网站。一个网站只封装了登录/账户管理功能,另一个网站是真正的网站。
- LoginWeb - 只有登录页面/css/images/javascript 文件夹允许匿名访问
- AdminWebsite - 通过表单身份验证完全锁定。即甚至 javascript/images/css 文件夹都没有
<authorization><allow users=*>
我
想要达到的目标这是我想要达到的工作流程,并且已经完成了 99% 的工作:
- 如果用户点击AdminWebsite上的任何页面,他将通过 FormsAuthentication发送回LoginWeb
- 用户在登录页面中提供凭据,并且LoginWeb网站发出表单身份验证票。用户仍未登录到AdminWebSite。(这样用户可以去更改密码页面等做账户管理功能)
- 用户在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>