asp.net Web Api移动客户端的自定义身份验证要求

时间:2012-04-08 06:24:46

标签: restful-authentication asp.net-mvc-4 asp.net-web-api

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

要求(类似):

1.a假设认证令牌是由电子邮件和日期制作并加密的

1.b身份验证令牌通过标头

发送回客户端

1.c身份验证令牌存储在客户端和服务器上

我的解决方案:

1)通过标头将认证令牌发送回客户端。我使用过cookie,然后是代码。

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

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

您的反馈/意见?

2 个答案:

答案 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)

在我看来还行。但是,如果您正在加密(因此您可以解密)并且可以找到发出的电子邮件(标识用户)和时间令牌(因此验证是否已过期),您是否仍需要将其存储在数据库中?我会,只有我有其他要求,如跟踪等。