Skip to content

Commit 8a825f3

Browse files
author
Nikos Dimitrakopoulos
committed
Support for "passive" SAML 2.0 AuthnRequest.
1 parent 63b9644 commit 8a825f3

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

lib/onelogin/ruby-saml/authrequest.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def create_authentication_xml_doc(settings)
4444
root.attributes['IssueInstant'] = time
4545
root.attributes['Version'] = "2.0"
4646
root.attributes['Destination'] = settings.idp_sso_target_url unless settings.idp_sso_target_url.nil?
47+
root.attributes['IsPassive'] = settings.passive unless settings.passive.nil?
4748

4849
# Conditionally defined elements based on settings
4950
if settings.assertion_consumer_service_url != nil

lib/onelogin/ruby-saml/settings.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ def initialize(overrides = {})
1717
attr_accessor :assertion_consumer_logout_service_url
1818
attr_accessor :compress_request
1919
attr_accessor :double_quote_xml_attribute_values
20+
attr_accessor :passive
2021

2122
private
2223

test/request_test.rb

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,23 @@ class RequestTest < Test::Unit::TestCase
4646
assert_match /^<samlp:AuthnRequest/, decoded
4747
end
4848

49+
should "create the SAMLRequest URL parameter with IsPassive" do
50+
settings = Onelogin::Saml::Settings.new
51+
settings.idp_sso_target_url = "http://example.com"
52+
settings.passive = true
53+
auth_url = Onelogin::Saml::Authrequest.new.create(settings)
54+
assert auth_url =~ /^http:\/\/example\.com\?SAMLRequest=/
55+
payload = CGI.unescape(auth_url.split("=").last)
56+
decoded = Base64.decode64(payload)
57+
58+
zstream = Zlib::Inflate.new(-Zlib::MAX_WBITS)
59+
inflated = zstream.inflate(decoded)
60+
zstream.finish
61+
zstream.close
62+
63+
assert_match /<samlp:AuthnRequest[^<]* IsPassive='true'/, inflated
64+
end
65+
4966
should "accept extra parameters" do
5067
settings = Onelogin::Saml::Settings.new
5168
settings.idp_sso_target_url = "http://example.com"

test/settings_test.rb

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ class SettingsTest < Test::Unit::TestCase
1111
:assertion_consumer_service_url, :issuer, :sp_name_qualifier,
1212
:idp_sso_target_url, :idp_cert_fingerprint, :name_identifier_format,
1313
:idp_slo_target_url, :name_identifier_value, :sessionindex,
14-
:assertion_consumer_logout_service_url
14+
:assertion_consumer_logout_service_url,
15+
:passive
1516
]
1617

1718
accessors.each do |accessor|
@@ -31,6 +32,7 @@ class SettingsTest < Test::Unit::TestCase
3132
:idp_slo_target_url => "http://sso.muda.no/slo",
3233
:idp_cert_fingerprint => "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
3334
:name_identifier_format => "urn:oasis:names:tc:SAML:2.0:nameid-format:transient",
35+
:passive => true,
3436
}
3537
@settings = Onelogin::Saml::Settings.new(config)
3638

0 commit comments

Comments
 (0)