Class: WinRM::HTTP::HttpGSSAPI

Inherits:
HttpTransport show all
Defined in:
lib/winrm/http/transport.rb

Overview

Uses Kerberos/GSSAPI to authenticate and encrypt messages

Instance Attribute Summary

Attributes inherited from HttpTransport

#endpoint

Instance Method Summary collapse

Methods inherited from HttpTransport

#basic_auth_only!, #no_ssl_peer_verification!, #no_sspi_auth!, #ssl_peer_fingerprint_verification!, #verify_ssl_fingerprint, #with_untrusted_ssl_connection

Constructor Details

#initialize(endpoint, realm, opts, service = nil) ⇒ HttpGSSAPI



263
264
265
266
267
268
269
270
271
272
273
274
# File 'lib/winrm/http/transport.rb', line 263

def initialize(endpoint, realm, opts, service = nil)
  require 'gssapi'
  require 'gssapi/extensions'

  super(endpoint, opts)
  # Remove the GSSAPI auth from HTTPClient because we are doing our own thing

  no_sspi_auth!
  service ||= 'HTTP'
  @service = "#{service}/#{@endpoint.host}@#{realm}"
  no_ssl_peer_verification! if opts[:no_ssl_peer_verification]
  init_krb
end

Instance Method Details

#send_request(message) ⇒ Object

Sends the SOAP payload to the WinRM service and returns the service’s SOAP response. If an error occurrs an appropriate error is raised.



281
282
283
284
285
286
287
288
289
290
291
292
# File 'lib/winrm/http/transport.rb', line 281

def send_request(message)
  resp = send_kerberos_request(message)

  if resp.status == 401
    @logger.debug 'Got 401 - reinitializing Kerberos and retrying one more time'
    init_krb
    resp = send_kerberos_request(message)
  end

  handler = WinRM::ResponseHandler.new(winrm_decrypt(resp.http_body.content), resp.status)
  handler.parse_to_xml
end