0

请根据以下要求提供您对我的解决方案的反馈。

要求(类似):

1.假设身份验证令牌由电子邮件和日期制成并已加密

1.b authentication Token通过header发回给客户端

1.c authentication Token存储在客户端和服务器上

我的解决方案:

1) 通过 header 将 authentication Token 发送回客户端。我使用了 cookie 和以下代码。

  HttpCookie cookie = new HttpCookie("AuthenticationToken");
      cookie.Value = "EncryptedToken";
      Response.Cookies.Add(cookie);

2)我将身份验证令牌存储在数据库中,并且对于每个请求,我将保存在 cookie 中的令牌与存储在数据库中的令牌进行比较。(假设加密、解密操作正确完成)

您的反馈/意见?

4

2 回答 2

1

It looks to me OK. However, if you are encrypting (so you can decrypt back) and can find out email (identifying user) and time token issued (hence verify whether expired or not), do you still need to store it in database? I would, only if i had other requirements such tracking, etc.

于 2012-04-08T09:04:01.477 回答
1

我没有安全方面的专业知识。对我来说,你的想法听起来可行。

但是,我很好奇您为什么要像这样进行“自定义”身份验证?您是否看过在 Web.API 中完成的“构建它” ASP.NET 身份验证?

然后,您可以使用标准的 .net 内容创建自定义 HttpOperationHandler ,例如:

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 和 Current.User

优点是您不需要将身份验证令牌存储在服务器上的某个数据库中并在每次请求时检索它。

于 2012-04-08T08:57:36.657 回答