Skip to content

Commit 0a25d27

Browse files
committed
Add separate :want_assertions_encrypted flag to settings.security
1 parent d4c8cff commit 0a25d27

File tree

2 files changed

+49
-24
lines changed

2 files changed

+49
-24
lines changed

lib/onelogin/ruby-saml/metadata.rb

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -36,17 +36,23 @@ def generate(settings, pretty_print=false)
3636
cert = settings.get_sp_cert
3737
if cert
3838
cert_text = Base64.encode64(cert.to_der).gsub("\n", '')
39-
kd = sp_sso.add_element "md:KeyDescriptor", { "use" => "signing" }
40-
ki = kd.add_element "ds:KeyInfo", {"xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#"}
41-
xd = ki.add_element "ds:X509Data"
42-
xc = xd.add_element "ds:X509Certificate"
43-
xc.text = cert_text
4439

45-
kd2 = sp_sso.add_element "md:KeyDescriptor", { "use" => "encryption" }
46-
ki2 = kd2.add_element "ds:KeyInfo", {"xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#"}
47-
xd2 = ki2.add_element "ds:X509Data"
48-
xc2 = xd2.add_element "ds:X509Certificate"
49-
xc2.text = cert_text
40+
if settings.security[:authn_requests_signed]
41+
cert_text = Base64.encode64(cert.to_der).gsub("\n", '')
42+
kd = sp_sso.add_element "md:KeyDescriptor", { "use" => "signing" }
43+
ki = kd.add_element "ds:KeyInfo", {"xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#"}
44+
xd = ki.add_element "ds:X509Data"
45+
xc = xd.add_element "ds:X509Certificate"
46+
xc.text = cert_text
47+
end
48+
49+
if settings.security[:want_assertions_encrypted]
50+
kd2 = sp_sso.add_element "md:KeyDescriptor", { "use" => "encryption" }
51+
ki2 = kd2.add_element "ds:KeyInfo", {"xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#"}
52+
xd2 = ki2.add_element "ds:X509Data"
53+
xc2 = xd2.add_element "ds:X509Certificate"
54+
xc2.text = cert_text
55+
end
5056
end
5157

5258
root.attributes["ID"] = OneLogin::RubySaml::Utils.uuid

test/metadata_test.rb

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ class MetadataTest < Minitest::Test
8989
end
9090
end
9191

92-
describe "when auth requests are signed" do
92+
describe "with a sign/encrypt certificate" do
9393
let(:key_descriptors) do
9494
REXML::XPath.match(
9595
xml_doc,
@@ -111,24 +111,43 @@ class MetadataTest < Minitest::Test
111111
settings.certificate = ruby_saml_cert_text
112112
end
113113

114-
it "generates Service Provider Metadata with AuthnRequestsSigned" do
115-
settings.security[:authn_requests_signed] = true
116-
assert_equal "true", spsso_descriptor.attribute("AuthnRequestsSigned").value
117-
assert_equal ruby_saml_cert.to_der, cert.to_der
114+
describe "and signed authentication requests" do
115+
before do
116+
settings.security[:authn_requests_signed] = true
117+
end
118118

119-
assert validate_xml!(xml_text, "saml-schema-metadata-2.0.xsd")
119+
it "generates Service Provider Metadata with AuthnRequestsSigned" do
120+
assert_equal "true", spsso_descriptor.attribute("AuthnRequestsSigned").value
121+
assert_equal ruby_saml_cert.to_der, cert.to_der
122+
123+
assert validate_xml!(xml_text, "saml-schema-metadata-2.0.xsd")
124+
end
125+
126+
it "generates Service Provider Metadata with X509Certificate for sign" do
127+
assert_equal 1, key_descriptors.length
128+
assert_equal "signing", key_descriptors[0].attribute("use").value
129+
130+
assert_equal 1, cert_nodes.length
131+
assert_equal ruby_saml_cert.to_der, cert.to_der
132+
133+
assert validate_xml!(xml_text, "saml-schema-metadata-2.0.xsd")
134+
end
120135
end
121136

122-
it "generates Service Provider Metadata with X509Certificate for sign and encrypt" do
123-
assert_equal 2, key_descriptors.length
124-
assert_equal "signing", key_descriptors[0].attribute("use").value
125-
assert_equal "encryption", key_descriptors[1].attribute("use").value
137+
describe "and encrypted assertions" do
138+
before do
139+
settings.security[:want_assertions_encrypted] = true
140+
end
141+
142+
it "generates Service Provider Metadata with X509Certificate for encrypt" do
143+
assert_equal 1, key_descriptors.length
144+
assert_equal "encryption", key_descriptors[0].attribute("use").value
126145

127-
assert_equal 2, cert_nodes.length
128-
assert_equal ruby_saml_cert.to_der, cert.to_der
129-
assert_equal cert_nodes[0].text, cert_nodes[1].text
146+
assert_equal 1, cert_nodes.length
147+
assert_equal ruby_saml_cert.to_der, cert.to_der
130148

131-
assert validate_xml!(xml_text, "saml-schema-metadata-2.0.xsd")
149+
assert validate_xml!(xml_text, "saml-schema-metadata-2.0.xsd")
150+
end
132151
end
133152
end
134153

0 commit comments

Comments
 (0)