错误请求尝试使用来自 ruby 的 Digest Auth 调用服务
Posted
技术标签:
【中文标题】错误请求尝试使用来自 ruby 的 Digest Auth 调用服务【英文标题】:Bad Request trying to call service with Digest Auth from ruby 【发布时间】:2017-02-03 15:24:31 【问题描述】:我正在尝试从 Rails 应用程序调用具有 Digest Auth 的服务,但它总是返回 400 bad request 错误。
我使用 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
请求的标头如下所示:
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\""
我不知道发生了什么,有没有其他的宝石可以让这更容易?
【问题讨论】:
【参考方案1】:通过比较浏览器头和ruby头,终于找到了问题。
我没有正确计算“nc”(呼叫计数器)。添加 +1 后,它开始返回 401 错误(现在我遇到了不同的问题;))。
【讨论】:
以上是关于错误请求尝试使用来自 ruby 的 Digest Auth 调用服务的主要内容,如果未能解决你的问题,请参考以下文章
如何在远程服务器上查看来自 ruby CGI 应用程序的错误消息?
(chap8 确认访问用户身份的认证) DIGES认证(摘要认证)
来自 API 请求的错误“在 null 上调用了方法 '[]'。接收方:null 尝试调用:[](0)”更新
jquery .ajax 对 ruby on rails 服务器的 post 请求在客户端出现 JSON.parse 错误
ruby 确定是否由机器人发出请求。来自http://stackoverflow.com/questions/5882264/ruby-on-rails-how-to-determine-if-a-r