Skip to content

Commit f85888e

Browse files
committed
Merge pull request #132 from dimelo/attributes_index
Support AttributeConsumingServiceIndex in AuthnRequest
2 parents 9eab546 + b514231 commit f85888e

5 files changed

Lines changed: 22 additions & 0 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,8 @@ class SamlController < ApplicationController
8686
settings.name_identifier_format = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
8787
# Optional for most SAML IdPs
8888
settings.authn_context = "urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport"
89+
# Optional. Describe according to IdP specification (if supported) which attributes the SP desires to receive in SAMLResponse.
90+
settings.attributes_index = 30
8991

9092
settings
9193
end

lib/onelogin/ruby-saml/authrequest.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ def create_authentication_xml_doc(settings)
4646
root.attributes['Destination'] = settings.idp_sso_target_url unless settings.idp_sso_target_url.nil?
4747
root.attributes['IsPassive'] = settings.passive unless settings.passive.nil?
4848
root.attributes['ProtocolBinding'] = settings.protocol_binding unless settings.protocol_binding.nil?
49+
root.attributes["AttributeConsumingServiceIndex"] = settings.attributes_index unless settings.attributes_index.nil?
4950

5051
# Conditionally defined elements based on settings
5152
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
@@ -19,6 +19,7 @@ def initialize(overrides = {})
1919
attr_accessor :double_quote_xml_attribute_values
2020
attr_accessor :passive
2121
attr_accessor :protocol_binding
22+
attr_accessor :attributes_index
2223

2324
private
2425

test/request_test.rb

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,22 @@ class RequestTest < Test::Unit::TestCase
8080
assert_match /<samlp:AuthnRequest[^<]* ProtocolBinding='urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST'/, inflated
8181
end
8282

83+
should "create the SAMLRequest URL parameter with AttributeConsumingServiceIndex" do
84+
settings = OneLogin::RubySaml::Settings.new
85+
settings.idp_sso_target_url = "http://example.com"
86+
settings.attributes_index = 30
87+
auth_url = OneLogin::RubySaml::Authrequest.new.create(settings)
88+
assert auth_url =~ /^http:\/\/example\.com\?SAMLRequest=/
89+
payload = CGI.unescape(auth_url.split("=").last)
90+
decoded = Base64.decode64(payload)
91+
92+
zstream = Zlib::Inflate.new(-Zlib::MAX_WBITS)
93+
inflated = zstream.inflate(decoded)
94+
zstream.finish
95+
zstream.close
96+
assert_match /<samlp:AuthnRequest[^<]* AttributeConsumingServiceIndex='30'/, inflated
97+
end
98+
8399
should "accept extra parameters" do
84100
settings = OneLogin::RubySaml::Settings.new
85101
settings.idp_sso_target_url = "http://example.com"

test/settings_test.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ class SettingsTest < Test::Unit::TestCase
1212
:idp_sso_target_url, :idp_cert_fingerprint, :name_identifier_format,
1313
:idp_slo_target_url, :name_identifier_value, :sessionindex,
1414
:assertion_consumer_logout_service_url,
15+
:attributes_index,
1516
:passive, :protocol_binding
1617
]
1718

@@ -32,6 +33,7 @@ class SettingsTest < Test::Unit::TestCase
3233
:idp_slo_target_url => "http://sso.muda.no/slo",
3334
:idp_cert_fingerprint => "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00",
3435
:name_identifier_format => "urn:oasis:names:tc:SAML:2.0:nameid-format:transient",
36+
:attributes_index => 30,
3537
:passive => true,
3638
:protocol_binding => 'urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST'
3739
}

0 commit comments

Comments
 (0)