【发布时间】:2013-11-28 06:44:38
【问题描述】:
我想制作一个 Web 应用程序,它是一个单页客户端,可与服务器中的 REST API 交互。我需要对我的应用程序的用户进行身份验证,而不是对第三方应用程序进行身份验证(后者是大多数传统 REST 参考书目的重点)。
在谷歌上搜索了很多之后,我发现有很多选项(基本 HTTP 身份验证、HTTP 摘要、OAuth 等),并且根据所选的一个可能会获得一些理想的属性。例如,基本身份验证很简单,但会发送未加密的普通密码,这不是一个好主意,除非您保证您的应用程序将在 TLS 下运行。相反,Digest 不会在每个请求上发送凭据,但会阻止强密码加密,并且容易受到中间人攻击[1]。 Meteor 引入 SRP,避免存储和发送密码[2]。
在我看来,共识是使用 OAuth,特别是 OAuth2 凭据流,因为我想授权访问我自己服务器上的资源[3][4][5]。我不明白这种特殊方法的好处是什么。我确实获得了使用 OAuth 作为委托身份验证形式的好处,就像使用 OpenID 进行联合身份验证一样:您根本不需要在服务器中处理身份验证数据。但是,如果您应用凭据流进行授权(或 OAuth1 2-legged 流),而不是引入第三方,看起来您仍然需要通过其他方式处理身份验证,例如 HTTP 基本或摘要。因此,如果您这样做,为什么不坚持唯一的方法,并在每个请求上发送凭据,而不是令牌?
这只是为了减少您必须实际发送凭据的请求数量?只是为了遵守 OAuth 约定?这些听起来不像是对其他方法的强烈争论。那么,我是遗漏了其他一些方面还是我误解了什么?
【问题讨论】:
标签: api security rest authentication oauth