摘要认证,基本认证和承载认证

9
我最近发布了一个有关身份验证的问题,但是没有收到任何回复,所以我想另一种方式来提问而不会重复。在应用程序的文档中,我看到了三种传递访问令牌以进行身份验证并接收我正在尝试获取的信息的方法:HTTP Digest auth、HTTP Basic auth和Bearer token auth。这些之间的区别对我来说不清楚,我的尝试使用Bearer token auth(请查看第5步)没有成功。能否有人解释一下这三个是什么,并希望指出我的错误?
3个回答

5

"HTTP基本认证"和"HTTP摘要认证"使用用户名和密码进行认证。HTTP摘要认证更加安全,因为它不会以明文形式发送用户名和密码。

"HTTP令牌认证"使用访问令牌进行认证。

你的HTTP令牌认证代码看起来还不错。


3

HTTP基本认证和HTTP摘要认证之间没有太大的区别。

对于基本身份验证,在使用oAuth系统之前,用户名将与冒号连接并与密码拼接。然后,结果将使用Base64算法进行编码。

例如,假设usernamedemo,您的access_token123,那么在这种情况下,连接后的结果字符串将为'demo:123',一旦我们应用了Base64编码,它将变成ZGVtbzoxMjM=

现在,此编码字符串会传输到HTTP头中,并由oAuth提供程序解码。再次强调,这不是非常强的编码机制,可以很容易地被解码,因为该身份验证系统不适用于非常高安全性的系统。

同样,摘要也使用HTTP协议发送和接收数据,但比基本OAuth更好,后者以明文形式发送数据。摘要使用MD5加密哈希类型的算法来加密您的密码/访问令牌,此外还使用nonce值来防止重放攻击。

希望这能让您对它们的工作方式有所了解。

更新

我刚看到Gimme bar上的代码。

GET /api/v0/tags HTTP/1.1
Host: gimmebar.com
User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; en-us) AppleWebKit/533.6+ (KHTML, like Gecko) Version/4.0 Safari/528.16 Titanium/1.1.0
Accept: */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
Authorization: Digest username="funkatron", realm="GimmeBarAPI", nonce="7a3ab1f9cde605f27797cd04c4d1fcf6", uri="/api/v0/tags", response="3654f9b1b2ba9489e1f01ae792852987", opaque="94619f8a70068b2591c2eed622525b0e", algorithm="MD5", cnonce="6897ccbff3b08776ab61e69a814c05b4", nc=00000001, qop="auth"
Connection: keep-alive

如果您在发送请求时看到它们同时传递了使用的哈希算法以及nonceusername,那么他们都是在应用程序中创建并放置在标题部分。您需要找到需要放置的标题名称。


谢谢您的回复,但我仍然不清楚如何在代码中实现这个。您有任何建议吗? - captDaylight
@captDaylight 我不建议使用基本身份验证,因为这太基础了。当你创建请求时,你必须使用MD5加密你的用户名和密码,并将它们放置在头部分中。 - Umesh Awasthi
1
首先,":"是在“Basic”身份验证中分隔用户名和密码的符号。Bearer是OAuth中的特定内容,而你提到的OAuth与基本HTTP授权头完全混淆了。 - abourget

2

当您与服务器进行身份验证时,令牌是在服务器端生成的。然后,在任何后续请求中,您都需要在请求头中提供所生成的令牌。

从安全角度来看,这些令牌是使用私钥生成的,只有验证用户的服务器知道此密钥

请查看jwt,他们在这个特定主题上有非常好的文档

gimmebar 文档说明如何获得访问权限。

POST /api/v0/auth/reqtoken HTTP/1.1

响应消息

{"request_token":"390a9b193fc51be1a78d13bf69555212","expires":1309375411}


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