HTTParty または Net:HTTP (またはその他) を使用して「ダイジェスト認証」Web サービスに接続しようとしています

StackOverflow https://stackoverflow.com/questions/2032166

質問

ダイジェスト認証を使用する Web サービスに接続しようとしています。

user:password@service.site.com/endpoint を使用して Safari で接続できます

RubyとRailsで、「basic」auth」オプションを使用してHTTPartyとNet:HTTPを使用して接続しようとしましたが、うまくいきませんでした。

HTTParty/Net:HTTP の「basic_auth」オプションが「ダイジェスト認証」サービスと互換性がないのかどうか疑問に思っていますか?

そうでない場合、別の接続方法はありますか?

役に立ちましたか?

解決

HTTParty の基本認証は明らかに、digest_auth と互換性がありません。この Net:HTTP 拡張機能を見つけました。 https://codesnippets.joyent.com/posts/show/1075 そして、Crack gemの助けを借りて、これを処理するメソッドを書いています。 http://github.com/jnunemaker/crack:

 def self.decode vin
    url = URI.parse(APP_CONFIG[:vinlink_url])
    Net::HTTP.start(url.host) do |http|
      res = http.head(url.request_uri)
      req = Net::HTTP::Get.new("/report?type=basic&vin=#{vin}")
      req.digest_auth(APP_CONFIG[:vinlink_login], APP_CONFIG[:vinlink_password], res)
      @response = http.request(req)
    end
    if @response.code == "200"
      hash = Crack::XML.parse(@response.body).recursive_downcase_keys!.recursive_symbolize_keys!
    end
  end  

他のヒント

今日は上記のコードスニペットのリンクにアクセスできませんでしたが、コードはここからも入手できます https://gist.github.com/73102. 。これをダイジェスト認証に正常に使用しましたが、複数のリクエストで問題が発生し、「Stale client nonce」エラーが発生しました。呼び出されるたびに、digest_auth 関数内で新しい nonce を生成することで解決しました。私が調べたときはそれについてあまり見つかりませんでしたので、これが誰かに役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top