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

问题描述 投票:0回答:2

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

要求(类似):

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

1.b身份验证令牌通过标头发送回客户端

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

我的解决方案

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

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

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

您的反馈/意见?

restful-authentication asp.net-mvc-4 asp.net-web-api
2个回答
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的内容

专家是您不需要在服务器上的某个DB中存储身份验证令牌,并在每次请求时检索它。


1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.