【问题标题】:Authentication with a REST API使用 REST API 进行身份验证
【发布时间】:2011-08-26 18:29:16
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 rest restful-authentication


    【解决方案1】:

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

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

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

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

    如果你想测试你的 REST API,我建议你使用REST Console for Google Chrome 和cURL。前者对初学者来说更容易,并且带有漂亮的 GUI,而 cURL 为您提供更高的保真度和更多的协议。

    编辑

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

    【讨论】:

    • +1 用于 Google Chrome 的 REST 控制台,提一下 :) 不错!
    • I wouldn't use cookies in a REST API - 同意,但是,您可以使用它来生成安全令牌,如this answer。
    • @James:这是一个很好的观点。使用令牌肯定比一直发送用户名和密码更好,因为这样更容易隔离样板代码。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-01-05
      • 2018-08-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-11
      相关资源
      最近更新 更多