Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 使用RESTAPI进行身份验证_Asp.net Mvc_Asp.net Mvc 3_Rest_Restful Authentication - Fatal编程技术网

Asp.net mvc 使用RESTAPI进行身份验证

Asp.net mvc 使用RESTAPI进行身份验证,asp.net-mvc,asp.net-mvc-3,rest,restful-authentication,Asp.net Mvc,Asp.net Mvc 3,Rest,Restful Authentication,我正在asp.NETMVC中构建RESTAPI。我的系统使用表单身份验证。用户名/密码或openId/fbconnect等。如果我在某个操作上有[Authorize]属性,android应用程序或桌面应用程序如何访问该方法 或者更好的问题是,我将如何设计桌面应用程序进行身份验证?我需要传递API密钥或某种令牌吗?或者桌面应用程序会像浏览器一样使用内部cookie吗?我不太确定RESTful API在具有身份验证的web浏览器之外如何工作。我不会在REST API中使用cookie。FormsAu

我正在asp.NETMVC中构建RESTAPI。我的系统使用表单身份验证。用户名/密码或openId/fbconnect等。如果我在某个操作上有
[Authorize]
属性,android应用程序或桌面应用程序如何访问该方法


或者更好的问题是,我将如何设计桌面应用程序进行身份验证?我需要传递API密钥或某种令牌吗?或者桌面应用程序会像浏览器一样使用内部cookie吗?我不太确定RESTful API在具有身份验证的web浏览器之外如何工作。

我不会在REST API中使用cookie。FormsAuthentication是一种基于cookie的方法。相反,调用方应该在头中的每个请求中提供身份验证凭据,或者作为请求参数提供身份验证凭据

例如,您可以使用基本身份验证来传输用户名和密码,或者使用一些加密的访问令牌(这不是非常RESTful)添加自定义身份验证头。您还可以实现OAuth,其中请求者将为每个请求提供一个访问令牌

我会编写一个自定义的
AuthorizeAttribute
来执行代码中的身份验证,这给了您很大的控制权。或者,您可以使用控制器基类并重写
OnAuthorization
方法

API不应提供密码质询:在web应用程序中,未经授权的请求通常会将用户重定向到登录页面。在API中,请求只会返回一个错误代码。现在,客户机应用程序的任务是通过对话框(如果适用)向用户提问。在移动应用程序中,您可能希望显示一个对话框。在使用OAuth的web应用程序中,您可能希望重定向到身份验证服务器

如果您想测试RESTAPI,我建议您使用和。前者对于初学者来说更容易,并且有一个很好的GUI,而cURL提供了更高的保真度和更多的协议

编辑


有点迂腐:一些API,甚至是相当大的提供商(如Twitter)的API,会不时返回
401
状态代码,通常会省略(必需的)
WWW-Authenticate
标题,因为他们无意挑战客户端。

看看亚马逊AWS认证方案。它可以满足大多数人的需求,并且使用标准的HTTP授权头。

+1对于谷歌Chrome的REST控制台,请注意:)不错
我不会在REST API中使用cookie
-同意,但是,您可以使用它生成一个安全令牌,如中所示。@James:这是一个很好的观点。当然最好使用令牌,而不是一直发送用户名和密码,因为这样更容易隔离样板代码。