Class: Onelogin::Saml::AuthRequest

Inherits:
Object
  • Object
show all
Defined in:
lib/onelogin/saml/auth_request.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(settings) ⇒ AuthRequest

Returns a new instance of AuthRequest.



6
7
8
# File 'lib/onelogin/saml/auth_request.rb', line 6

def initialize(settings)
  @settings = settings
end

Instance Attribute Details

#forward_urlObject (readonly)

Returns the value of attribute forward_url.



4
5
6
# File 'lib/onelogin/saml/auth_request.rb', line 4

def forward_url
  @forward_url
end

#idObject (readonly)

Returns the value of attribute id.



4
5
6
# File 'lib/onelogin/saml/auth_request.rb', line 4

def id
  @id
end

#request_xmlObject (readonly)

Returns the value of attribute request_xml.



4
5
6
# File 'lib/onelogin/saml/auth_request.rb', line 4

def request_xml
  @request_xml
end

#settingsObject (readonly)

Returns the value of attribute settings.



4
5
6
# File 'lib/onelogin/saml/auth_request.rb', line 4

def settings
  @settings
end

Class Method Details

.create(settings) ⇒ Object



10
11
12
13
# File 'lib/onelogin/saml/auth_request.rb', line 10

def self.create(settings)
  ar = AuthRequest.new(settings)
  ar.generate_request
end

Instance Method Details

#generate_requestObject



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/onelogin/saml/auth_request.rb', line 15

def generate_request
  @id = Onelogin::Saml::AuthRequest.generate_unique_id(42)
  issue_instant = Onelogin::Saml::AuthRequest.get_timestamp

  @request_xml = 
    "<samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" ID=\"#{@id}\" Version=\"2.0\" IssueInstant=\"#{issue_instant}\" ProtocolBinding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" AssertionConsumerServiceURL=\"#{Array(settings.assertion_consumer_service_url).first}\">" +
    "<saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">#{@settings.issuer}</saml:Issuer>\n" +
    "<samlp:NameIDPolicy xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" Format=\"#{@settings.name_identifier_format}\" AllowCreate=\"true\"></samlp:NameIDPolicy>\n"
  
  if @settings.requested_authn_context
    @request_xml += "<samlp:RequestedAuthnContext xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" Comparison=\"exact\">"
    @request_xml += "<saml:AuthnContextClassRef xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">#{@settings.requested_authn_context}</saml:AuthnContextClassRef>"
    @request_xml += "</samlp:RequestedAuthnContext>\n"
  end
    
  @request_xml += "</samlp:AuthnRequest>"

  deflated_request  = Zlib::Deflate.deflate(@request_xml, 9)[2..-5]     
  base64_request    = Base64.strict_encode64(deflated_request)
  encoded_request   = CGI.escape(base64_request)

  @forward_url = @settings.idp_sso_target_url + (@settings.idp_sso_target_url.include?("?") ? "&" : "?") + "SAMLRequest=" + encoded_request
end