【发布时间】:2018-04-27 17:23:59
【问题描述】:
我正在使用 cookie 传递用户信息以进行身份验证,如 this question 所示。一切正常,直到我们的团队升级了我们的计算机并且现在在 Windows 10 上。现在我的 cookie 在 global.asax.cs 的 Application_PostAuthenticateRequest 中找不到。
这是我尝试发送 cookie 的代码:
private void AddUserDataToCookies(User user)
{
var serializeModel = new WebUserSerializeModel
{
FirstName = user.Person.FirstName,
MiddleName = user.Person.MiddleName,
LastName = user.Person.LastName,
CredentialNumber = user.CredentialNumber,
Roles = user.Roles.Select(role => role.Name).ToList(),
Permissions = user.Permissions.Select(perm => perm.PrimaryKey).ToList()
};
var userData = new JavaScriptSerializer().Serialize(serializeModel);
var authTicket = new FormsAuthenticationTicket(1, user.CredentialNumber, DateTime.Now, DateTime.Now.AddMinutes(15), false, userData);
var encryptedTicket = FormsAuthentication.Encrypt(authTicket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
{
Secure = true,
HttpOnly = true
};
Response.Cookies.Add(cookie);
var requestCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
}
cookie 显示在请求 cookie 中。但是当我在我的 global.asax 中尝试时,它没有。我的全局 asax 代码如下。
protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (cookie != null)
{
try
{
var authTicket = FormsAuthentication.Decrypt(cookie.Value);
if (authTicket != null)
{
var serializer = new JavaScriptSerializer();
var serializeModel = serializer.Deserialize<WebUserSerializeModel>(authTicket.UserData);
var user = new WebUser(serializeModel.FirstName, serializeModel.LastName)
{
MiddleName = serializeModel.MiddleName,
CredentialNumber = serializeModel.CredentialNumber,
Roles = serializeModel.Roles,
Permissions = serializeModel.Permissions
};
HttpContext.Current.User = user;
}
}
catch (CryptographicException ex)
{
Logger.Error("Error while decrypting cookie post authentication.", ex);
FormsAuthentication.SignOut();
HttpContext.Current.User = null;
}
}
}
有没有人知道为什么更改为 Windows 10 可能会导致此问题?总的来说,我对 ASP.NET 和 Web 开发有点陌生。
编辑 - 通过在创建我的 cookie 时删除 Secure = true 我能够让它工作。在添加答案之前,我正在调查为什么会出现这种情况,我欢迎任何见解。
【问题讨论】:
标签: c# asp.net-mvc authentication asp.net-mvc-5 windows-10