手动验证ASP.NET Identity用户帐户

时间:2014-06-20 01:25:18

标签: c# asp.net-mvc asp.net-web-api asp.net-identity

我有这个使用ASP.NET Identity(2.0之前版本)的ASP.NET MVC 5站点,该站点附带了一个WebAPI。 我有一个Windows Phone应用程序将使用此站点的服务,我想要验证用户帐户;所以从WP应用程序我会要求用户名和密码将它们发送到服务器进行验证。现在,我想使用ASP.NET Identity已经在手机上使用的相同散列技术,所以我可以发送散列,并在另一边比较它,但我不确定它使用什么散列,加上,它似乎是使用某种盐,因为我有几个测试用户帐户使用相同的密码,但有不同的哈希,也许它是SecurityStamp?我宁愿不通过电汇发送纯文本密码,我很确定这是一个巨大的不可。

我该如何处理这个问题?

谢谢

2 个答案:

答案 0 :(得分:3)

我不会窃取优秀的existing answer的风头,它解释了ASP.NET身份如何在底层执行散列。

话虽这么说,这个问题实际上比你想象的容易得多。您可以通过网络发送“纯文本”密码,但您需要通过SSL / TLS发送密码!这实际上是大多数网站发送您的凭据的方式。通过网络加密整个HTTP请求。对此的简单解决方案是获得证书并站起来执行SSL / TLS的Web服务器。

要真正回答这个问题(即使我不相信这是正确的解决方案),虽然看起来你可以获得有关如何执行散列的来源,但我不建议在客户端上实现它侧。原因是如果您升级到更新版本的ASP.NET身份?您需要跟踪源代码并更新客户端应用程序的散列方法。您的用户将如何在其设备上获得新的哈希方法?他们需要升级到最新版本的应用程序。所以现在你遇到了那些在升级应用程序之前无法进行身份验证的用户,因为你的服务器端版本已经升级了。

答案 1 :(得分:0)

您可以覆盖MVC方法

public interface IAuthenticationFilter
{
    void OnAuthentication(AuthenticationContext filterContext);
    void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext);
}

以下是creating custom Authentication in MVC的链接。这必须帮助你......!