使用REST API进行身份验证

Sha*_*ean 7 rest asp.net-mvc restful-authentication asp.net-mvc-3

我正在asp.net mvc中构建一个REST API.我的系统使用表单身份验证 用户名/密码或openId/fbconnect等.如果我有[Authorize]动作的属性,Android应用程序或桌面应用程序将如何访问该方法?

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

mne*_*syn 14

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

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

我编写了一个自定义AuthorizeAttribute来在您的代码中执行身份验证,这为您提供了很多控制权.或者,您可以使用控制器基类并覆盖该OnAuthorization方法.

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

如果您想测试REST API,我建议您使用适用于Google ChromecURL的REST控制台.前者对于初学者来说更容易,并且具有良好的GUI,而cURL为您提供更高保真度和更多协议.

编辑

有点迂腐的注意事项:有些API,即使是相当大的提供商,例如Twitter,也会401不时返回状态代码,通常会省略(强制性)WWW-Authenticate标题,因为他们不打算挑战客户端.