Skip to content

Instantly share code, notes, and snippets.

@rodrei
Created June 14, 2012 20:11
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save rodrei/2932631 to your computer and use it in GitHub Desktop.
Save rodrei/2932631 to your computer and use it in GitHub Desktop.
Example: NTLM Authentication with NetHTTP
uri = URI('https://host.com/ews/exchange.asmx')
user = ''
passwd = ''
Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
request = Net::HTTP::Get.new(uri.request_uri)
t1 = Net::NTLM::Message::Type1.new()
request['Authorization'] = 'NTLM ' + t1.encode64
response = http.request(request)
if /\A(NTLM|Negotiate) (.+)\z/ =~ response.header['www-authenticate']
msg = $2
end
t2 = Net::NTLM::Message.decode64(msg)
t3 = t2.response({:user => user, :password => passwd}, {:ntlmv2 => true})
request['Authorization'] = 'NTLM ' + t3.encode64
response = http.request(request)
puts response.msg
response.header.each_header do |h| puts h.inspect + " " + response.header[h] end
puts response.body
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment