Parent

Files

HTTPClient::NegotiateAuth

Authentication filter for handling Negotiate/NTLM negotiation. Used in WWWAuth and ProxyAuth.

NegotiateAuth depends on ‘ruby/ntlm’ module.

Attributes

scheme[R]

Authentication scheme.

ntlm_opt[R]

NTLM opt for ruby/ntlm. {:ntlmv2 => true} by default.

Public Class Methods

new() click to toggle source

Creates new NegotiateAuth filter.

     # File lib/httpclient/auth.rb, line 379
379:     def initialize
380:       @auth = {}
381:       @auth_default = nil
382:       @challenge = {}
383:       @scheme = "Negotiate"
384:       @ntlm_opt = {
385:         :ntlmv2 => true
386:       }
387:     end

Public Instance Methods

challenge(uri, param_str) click to toggle source

Challenge handler: remember URL and challenge token for response.

     # File lib/httpclient/auth.rb, line 438
438:     def challenge(uri, param_str)
439:       return false unless NTLMEnabled
440:       if param_str.nil? or @challenge[uri].nil?
441:         c = @challenge[uri] = {}
442:         c[:state] = :init
443:         c[:authphrase] = ""
444:       else
445:         c = @challenge[uri]
446:         c[:state] = :response
447:         c[:authphrase] = param_str
448:       end
449:       true
450:     end
get(req) click to toggle source

Response handler: returns credential. See ruby/ntlm for negotiation state transition.

     # File lib/httpclient/auth.rb, line 408
408:     def get(req)
409:       return nil unless NTLMEnabled
410:       target_uri = req.header.request_uri
411:       domain_uri, param = @challenge.find { |uri, v|
412:         Util.uri_part_of(target_uri, uri)
413:       }
414:       return nil unless param
415:       user, passwd = Util.hash_find_value(@auth) { |uri, auth_data|
416:         Util.uri_part_of(target_uri, uri)
417:       }
418:       unless user
419:         user, passwd = @auth_default
420:       end
421:       return nil unless user
422:       state = param[:state]
423:       authphrase = param[:authphrase]
424:       case state
425:       when :init
426:         t1 = Net::NTLM::Message::Type1.new
427:         return t1.encode64
428:       when :response
429:         t2 = Net::NTLM::Message.decode64(authphrase)
430:         t3 = t2.response({:user => user, :password => passwd}, @ntlm_opt.dup)
431:         @challenge.delete(domain_uri)
432:         return t3.encode64
433:       end
434:       nil
435:     end
reset_challenge() click to toggle source

Resets challenge state. Do not send ’*Authorization’ header until the server sends ’*Authentication’ again.

     # File lib/httpclient/auth.rb, line 391
391:     def reset_challenge
392:       @challenge.clear
393:     end
set(uri, user, passwd) click to toggle source

Set authentication credential. uri == nil for generic purpose (allow to use user/password for any URL).

     # File lib/httpclient/auth.rb, line 397
397:     def set(uri, user, passwd)
398:       if uri
399:         uri = Util.uri_dirname(uri)
400:         @auth[uri] = [user, passwd]
401:       else
402:         @auth_default = [user, passwd]
403:       end
404:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.