【问题标题】:Digest, Basic, and Bearer Authentication摘要、基本和承载认证
【发布时间】:2017-09-02 20:52:06
【问题描述】:

我最近发布了一个 problem 我正在进行身份验证,但没有收到任何回复,所以我想了另一种方法来问这个问题而不是多余的。

我在应用程序documentation 中看到的是三种传递访问令牌以进行身份​​验证并接收我试图获取的信息的方式:HTTP Digest auth、HTTP 基本身份验证和Bearer令牌身份验证。我不清楚它们之间的区别,我在Bearer token auth 的尝试(查看第 5 步)没有奏效。

谁能解释这三个是什么,并希望指出我做错了什么?

【问题讨论】:

    标签: django authentication oauth


    【解决方案1】:

    “HTTP Basic Auth”和“HTTP Digest”使用用户名和密码进行身份验证。 HTTP Digest 身份验证更安全,因为它不会以纯文本形式发送用户名和密码。

    “HTTP Bearer Auth”使用 access_token 进行身份验证。

    您的 HTTP Bearer Auth 代码在我看来没问题。

    【讨论】:

      【解决方案2】:

      HTTP Basic Authentication 和 HTTP Digest Authentication 没有太大区别。

      对于使用 oAuth 系统用户名的基本 Auth Before 请求附加一个冒号并与密码连接。结果将使用 Base64 算法进行编码。

      例如说usernamedemo,而你的access_token123,所以在这种情况下,串联后的结果字符串将为'demo:123',一旦我们应用Base64编码,它将变为ZGVtbzoxMjM= /p>

      现在这个编码字符串在HTTP header 中传输,并由 oAuth 提供者解码。同样,这不是一个非常强大的编码机制,并且很容易被解码,因为这个 Auth 系统不适用于非常高安全性的系统。

      Again Digest 也使用HTTP 协议来发送和接收数据,但它比在plaintext 中发送数据的基本OAuth 要好得多。Digest 使用MD5 cryptographic hashing 类型的算法来加密你的password/access_token,除此之外它还使用nonce 值停止重放攻击。

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

      更新

      我刚刚在 Gimme 酒吧看到了代码

      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 我不建议进行基本身份验证,因为这太基本了。现在对于另一部分,当您创建请求时,您必须使用 MD5 加密您的用户名和密码并放置它们在标题部分。
      • 首先,它是一个':',用于分隔“基本”身份验证中的用户名和密码。 Bearer 是 OAuth 特有的,您对 OAuth 的引用与基本的 HTTP Authorization 标头完全混淆。
      【解决方案3】:

      当您对服务器进行身份验证时,将在服务器端生成不记名令牌。然后对于任何后续请求,您在请求标头中提供生成的不记名令牌。

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

      看看jwt,他们有关于这个特定主题的非常好的文档

      gimmebar documentation 非常清楚如何获得访问权限

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

      回复消息

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

      【讨论】:

        猜你喜欢
        • 2011-05-03
        • 2012-05-26
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        • 1970-01-01
        • 2013-03-27
        • 2012-07-18
        • 2015-01-04
        相关资源
        最近更新 更多