请根据以下要求提供我的解决方案的反馈。
要求(类似):
1.a假设认证令牌是由电子邮件和日期制作并加密的
1.b身份验证令牌通过标头
发送回客户端1.c身份验证令牌存储在客户端和服务器上
我的解决方案:
1)通过标头将认证令牌发送回客户端。我使用过cookie,然后是代码。
HttpCookie cookie = new HttpCookie("AuthenticationToken");
cookie.Value = "EncryptedToken";
Response.Cookies.Add(cookie);
2)我将认证令牌存储在数据库中,并且对于每个请求,我将保存在cookie中的令牌与存储在数据库中的令牌进行比较。 (假设加密,解密操作正确完成)
您的反馈/意见?
答案 0 :(得分:1)
我没有安全方面的专业知识。对我来说,你的想法听起来很可行。
但是,我很好奇你为什么要像这样做“自定义”身份验证? 您是否看过“构建它”在Web.API中完成的ASP.NET身份验证?
然后你可以create a custom HttpOperationHandler使用标准的.net之类的东西:
var ticket = FormsAuthentication.Decrypt(val);
var ident = new FormsIdentity(ticket);
...
var principle = new GenericPrincipal(identity, new string[0]);
Thread.CurrentPrincipal = principle;
...
if (!principal.Identity.IsAuthenticated)
return false;
另外,您可能希望了解Thread.CurrentPrincipal and Current.User
专业人员是您不需要在服务器上的某个数据库中存储身份验证令牌,并在每次请求时检索它。
答案 1 :(得分:1)
在我看来还行。但是,如果您正在加密(因此您可以解密)并且可以找到发出的电子邮件(标识用户)和时间令牌(因此验证是否已过期),您是否仍需要将其存储在数据库中?我会,只有我有其他要求,如跟踪等。