C# 将默认表单身份验证cookie令牌从用户名更改为意外值

C# 将默认表单身份验证cookie令牌从用户名更改为意外值,c#,asp.net,forms-authentication,C#,Asp.net,Forms Authentication,我正在实现一个带有表单身份验证的ASP.NET(C#,MySQL DB)网站。 我注意到身份验证cookie包含用户名(在我的例子中,是此人的电子邮件)。 在阅读和其他资源之后,我明白即使是加密的,保存期望值也是不安全的。 如何将此默认功能更改为意外值?您可以这样做 FormsAuthenticationTicket tkt; string cookiestr; HttpCookie ck; tkt = new FormsAuthenticationTicket(1, _user.User_Id

我正在实现一个带有表单身份验证的ASP.NET(C#,MySQL DB)网站。 我注意到身份验证cookie包含用户名(在我的例子中,是此人的电子邮件)。 在阅读和其他资源之后,我明白即使是加密的,保存期望值也是不安全的。
如何将此默认功能更改为意外值?

您可以这样做

FormsAuthenticationTicket tkt;
string cookiestr;
HttpCookie ck;
tkt = new FormsAuthenticationTicket(1, _user.User_Id.ToString(), DateTime.Now,
DateTime.Now.AddMinutes(60), true, string.Format("{0},{1}",     System.DateTime.Now.ToString(), _user.User_Id.ToString()));
cookiestr = FormsAuthentication.Encrypt(tkt);
ck = new HttpCookie(FormsAuthentication.FormsCookieName, cookiestr);
ck.Path = FormsAuthentication.FormsCookiePath;
Response.Cookies.Add(ck);

我只是简单地将我的用户ID添加到cookie上,这对日志记录非常有帮助。

但是我应该在哪里写入它呢?我需要在创建/超时时写入cookie,并在任何页面请求时读取cookie。。这是提供者当前自动完成的操作。我还是希望它能自动完成。因此,不必编写读取和决定用户是否经过身份验证的逻辑。我认为您需要一种功能,通过该功能可以限制在创建cookie期间存储的数据,理想情况下是在用户登录系统并经过身份验证时。这是您应该使用此代码的时候。现在读取cookie是一件独立的事情。总之,您可能希望读取cookie以获得一些值,这是我在reach http请求时的想法。您可以检索cookie,并且必须对其进行解密,以便您可以使用这些值。实际上,成员资格提供商正在自动执行所有这些操作。不是读取cookie,而是检查用户是否经过身份验证。我只是简单地调用成员身份的isauthenticated函数。唯一的问题是,会员资格提供商通过用户名(即电子邮件)来识别用户。该值可以预测和折衷。我想要标准功能,但将令牌本身从用户名更改为其他类似会话id的内容