HTTP基本认证、摘要认证和Oauth是什么?

12

一个Web应用程序通过Restful API调用让用户访问资源,应该选择基本身份验证摘要身份验证Oauth中的哪一种?

Oauth难道不是替代基本身份验证和摘要式身份验证的更好的解决方案吗?


酷站点试图揭示:http://oauthbible.com/ - SudoPlz
3个回答

22

简单来说:

http基础认证:明文在Authorize头中发送用户名和密码。

http摘要认证:发送经服务器提供的nonce哈希后的用户名和密码。

oauth 1.0a和2.0最初都是设计用于授权第三方访问非自己拥有资源(例如,我允许移动照片应用代表我发布到Facebook),而无需向第三方提供我的凭据。 这两个协议的工作原理如下:

  • 用户从移动照片应用程序被引导到facebook的登录页面
  • 一旦他们登录,它们将被重定向回移动照片应用程序并获得一个代码。
  • 移动照片应用程序然后使用此代码进行访问令牌的兑换
  • 移动照片应用程序可以随后向Facebook发出请求,以将我的照片发布到我的墙上。

oauth1.0a:比oauth2更安全,但更难实现,还需要对所有请求进行签名。

oauth2:依赖ssl进行安全性,不需要请求签名。尽管其主要作者已因认为它未能达到其最初的设计目标(安全性,互操作性)而放弃了该项目,但它仍被Facebook和Google广泛使用。

以下文章对此非常有用:

我找到的rfcs尚不足够精通,但那些是权威来源,尽管有点难以理解。


FYI,Oauth2.0 在其部分流程中使用 HTTP 基本身份验证。 - garbagecollector
嗯...我没有看到HTTP摘要认证与qop=auth-int (rfc2617,1999年6月之间的真正区别,以及OAuth 1授权方案(2010)...不确定OAuth的争议在哪里 :-) - Kenney
我可以补充一下HTTP摘要认证:nonce值的目的是防止重复请求。每个请求都会有一个不同的nonce值,因此每个请求,尽管包含相同的用户名/密码,都具有唯一的哈希值。 - garbagecollector

3
Phil Sturgeon有一本不错的电子书(构建你不会讨厌的API),其中一个章节专门介绍了身份验证。它涵盖了以下内容:
  • 基础认证
  • Digest认证
  • OAuth 1.0a认证
  • OAuth 2认证

如果您考虑在您的RESTful API中实现这些机制,我强烈推荐阅读它。

更新为什么要踩负面评价?


3
因为您没有回答问题,而只是链接了一本书。这个回答更适合作为评论。 - Zimano
仅列出一些东西不是一个答案......您知道这一点。请提供更多的内容,而不仅仅是链接。 - ΩmegaMan

2
我也在努力解答这个问题。我认为这取决于你的应用程序的范围。oAUTH限制了开发人员的访问,他们必须构建一个客户端来完成握手。
基本身份验证可以与许多数据浏览器客户端一起使用,如Sesame,并且可以与Excel 2010以及任何旧浏览器一起使用。唯一的问题是密码以明文形式传输,这可以通过在https上托管您的应用程序来减轻。
不幸的是,我对摘要不太了解。
我个人正在尝试测试每个实现:http基本身份验证和oauth。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接