C# 在MVC2中验证REST请求

C# 在MVC2中验证REST请求,c#,asp.net-mvc-2,restful-authentication,C#,Asp.net Mvc 2,Restful Authentication,嘿,在过去的几个小时里,我一直在尝试通过asp.NETMVC提供RESTful服务。我在互联网站上找到的所有教程和指南似乎都没有涵盖身份验证 目前,我们正在现有的MVC应用程序中使用基于表单的身份验证。据我所知,我们需要添加基本的HTTP身份验证,以便能够处理连接到用户上下文的REST请求和用户权限。有没有办法在一个应用程序中“混合”这两种身份验证模式?您可以轻松地将ASP.NET成员资格框架与ASP.NET MVC RESTful服务结合使用。有关MVC RESTful服务的实现,请参见以下链

嘿,在过去的几个小时里,我一直在尝试通过asp.NETMVC提供RESTful服务。我在互联网站上找到的所有教程和指南似乎都没有涵盖身份验证


目前,我们正在现有的MVC应用程序中使用基于表单的身份验证。据我所知,我们需要添加基本的HTTP身份验证,以便能够处理连接到用户上下文的REST请求和用户权限。有没有办法在一个应用程序中“混合”这两种身份验证模式?

您可以轻松地将ASP.NET成员资格框架与ASP.NET MVC RESTful服务结合使用。有关MVC RESTful服务的实现,请参见以下链接

如果您不知道成员资格框架,请使用以下链接

我希望有帮助,谢谢你,戴夫

我明白你的意思。成员资格框架广泛使用cookie进行身份验证。您将凭证传递给服务器,服务器根据用户数据库验证凭证,并向您发出身份验证cookie。下次urs的每次调用都包含此身份验证cookie,服务器使用此cookie对用户进行身份验证和授权。现在,当您使用浏览器时,整个工作流可以无缝工作

现在,在您的场景中,您可以在控制器中创建一个验证凭据的操作。您可以在post/get data中向此操作传递凭据。您必须在代码中保存身份验证cookie,并在每次调用服务器时将其包括在内。您可以重写HttpWebRequest类来执行这些步骤,并且可以在代码中使用相同的类

如果这是一个很大的开销,并且您正在寻找类似Web服务的功能,我建议您研究WCF服务/Ado.NET数据服务。这些与成员资格框架的集成更加无缝,可能更适合您的结果


我希望这能有所帮助,谢谢。

我不确定是否有内置内容,但您可以自己编写。比如:

var authHeader = Request.ServerVariables["HTTP_AUTHORIZATION"];
if (authHeader.StartsWith("Basic ", StringComparison.InvariantCultureIgnoreCase))
{
    var authParams = Encoding.Default.GetString(Convert.FromBase64String(authHeader.Substring("Basic ".Length)));
    var arr = authParams.Split(':');
    var username = arr[0];
    var password = arr[1];
}   

如果您正在用MVC编写自己的REST框架,那么您可以拥有一个基本控制器类,并拥有一个类似于此的方法,该方法在每个操作之前运行,以验证调用方。

嘿,Naveen,谢谢您。因此,基本上客户端必须浏览整个DOM,并在现有登录表单上发布其凭据,对吗?这对我来说似乎不太舒服。有没有办法使用可以在请求头中传递的凭据?嘿,realworldcoder。是的,我目前的解决方案是这样的。我实现了一个自定义authorizeattribute,用于检查请求变量。要尽快发布解决方案=)很好。如果还没有的话,您可以在基本控制器的OnActionExecuting()方法中进行检查。虽然所有这些都有效,但严格地说,cookie可能在调用之间保持会话状态,从而违反了RESTful原则。