ruby-on-rails - 尝试从 ruby​​ 使用 Digest Auth 调用服务的错误请求

标签 ruby-on-rails ruby web-services authentication digest-authentication

我正在尝试从 Rails 应用程序调用带有 Digest Auth 的服务,但它总是返回 400 错误请求错误。

我使用 net-http-digest_auth gem 来创建标题,但我想我错过了一些东西。

def get_digest(url)
  uri = URI.parse(url)

  http = Net::HTTP.new uri.host, uri.port
  http.use_ssl = true
  http.verify_mode = OpenSSL::SSL::VERIFY_PEER

  req = Net::HTTP::Get.new(uri.request_uri)

  # Fist call with the 401 and auth headers
  digest_response = http.request(req)

  digest_auth_request = Net::HTTP::DigestAuth.new

  uri.user = digest_auth[:user]
  uri.password = digest_auth[:password]

  auth = digest_auth_request.auth_header uri, digest_response['www-authenticate'], 'GET', true

  req.add_field 'Authorization', auth

  response = http.request(req)
  # Response is always #<Net::HTTPBadRequest 400 Bad Request readbody=true>

  if response.code.to_i == 200
    response_body = response.body
  else
    error
  end

  response_body
end

请求的 header 如下所示:

Digest username=\"myuser@mydomain.com\", realm=\"Digest\", algorithm=MD5-sess, qop=\"auth\", uri=\"/path/WS/my%20user/path/path/path/path/service.svc\", nonce=\"+Upgraded+v1e3f88bce1c32bd15avn421e440ca6622ebadd4522f7ed201fab1421c39d8fd15b771b972c9eb59894f8879307b9e6a5544476bc05cc7885a\", nc=00000000, cnonce=\"d42e6ea8a37aadsasdbea1231232456709\", response=\"7fbfc75cc3aasdasd342230ebf57ac37df\""

我不知道发生了什么,是否有任何其他 gem 可以使这更容易?

最佳答案

通过比较浏览器 header 和 ruby​​ header ,终于找到了问题。

我没有正确计算“nc”(调用计数器)。添加 +1 后,它开始返回 401 错误(现在我遇到了不同的问题;))。

关于ruby-on-rails - 尝试从 ruby​​ 使用 Digest Auth 调用服务的错误请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42027567/

相关文章:

c# - 使用 .NET 连接到亚马逊

ruby-on-rails - 带有 Rails 的 AJAX 设计表单不更新数据

ruby - "or"和 | 之间有什么区别?在 ruby ?

c# - Web 服务客户端和压缩

sql - 获取所有已标记为属于用户的任何兴趣的帖子

ruby-on-rails - Rails NoMethodError(时间 :Class): not so trivial error 的未定义方法 `something '

java - 带有 JSON : PUT and DELETE not working 的 RESTful Web 服务

css - 如何在 Rails 上显示整页背景图片?

ruby-on-rails - 我如何让队友从他的机器上重启heroku服务器

ruby-on-rails - 从方法 Controller 重定向到特定 View