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