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

问题描述:

请根据以下要求提供您对我的解决方案的反馈。手机客户端的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)I将存储的认证令牌在数据库中,并对于每个请求I比较令牌保存在与存储在数据库中标记饼干。 (假设加密,解密操作正确完成)

您的反馈/提交?

+1

饼干工作正常的网页浏览器,但如果你想也针对移动和桌面客户端,你可能需要考虑别的 – cecilphillip 2012-04-11 04:05:42

+0

你是对的。我已经结束了使用sqllite,并通过http头发送身份验证令牌。 – 2012-04-11 04:48:47

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

但是,我很好奇你为什么想要做“定制”这样的认证? 你看过“build it”在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

亲的是,你并不需要保存身份验证令牌在一些DB在服务器上并在每个请求中检索它。

+0

在Restful中你真的不能使用ASP.NET Membership API – 2012-04-08 13:06:26

+1

?为什么不? – Cotten 2012-04-08 15:07:44

+0

这是一个非常有效的解决方案。你可以通过AuthorizationFilterAttribute来做到这一点。 – Junto 2012-07-03 23:09:51

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

+0

我将它存储在数据库中,因为否则我如何跟踪不同请求中的用户。
例如第一次用户请求得到,下一个请求是后...
所以基本上我正在验证用户的每个请求...我希望我已经解释它。 – 2012-04-08 13:11:44