Skip to content

Commit bb66830

Browse files
authored
Merge pull request SAML-Toolkits#367 from PagerDuty/IMS-141-separate-signing-encryption
Add separate :want_assertions_encrypted flag to settings.security
2 parents 0651e65 + f1e1560 commit bb66830

File tree

2 files changed

+37
-17
lines changed

2 files changed

+37
-17
lines changed

lib/onelogin/ruby-saml/metadata.rb

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,13 @@ def generate(settings, pretty_print=false)
4242
xc = xd.add_element "ds:X509Certificate"
4343
xc.text = cert_text
4444

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
45+
if settings.security[:want_assertions_encrypted]
46+
kd2 = sp_sso.add_element "md:KeyDescriptor", { "use" => "encryption" }
47+
ki2 = kd2.add_element "ds:KeyInfo", {"xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#"}
48+
xd2 = ki2.add_element "ds:X509Data"
49+
xc2 = xd2.add_element "ds:X509Certificate"
50+
xc2.text = cert_text
51+
end
5052
end
5153

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

test/metadata_test.rb

Lines changed: 30 additions & 12 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,42 @@ 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
114+
it "generates Service Provider Metadata with X509Certificate for sign" do
115+
assert_equal 1, key_descriptors.length
116+
assert_equal "signing", key_descriptors[0].attribute("use").value
117+
118+
assert_equal 1, cert_nodes.length
117119
assert_equal ruby_saml_cert.to_der, cert.to_der
118120

119121
assert validate_xml!(xml_text, "saml-schema-metadata-2.0.xsd")
120122
end
121123

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
124+
describe "and signed authentication requests" do
125+
before do
126+
settings.security[:authn_requests_signed] = true
127+
end
126128

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
129+
it "generates Service Provider Metadata with AuthnRequestsSigned" do
130+
assert_equal "true", spsso_descriptor.attribute("AuthnRequestsSigned").value
131+
assert_equal ruby_saml_cert.to_der, cert.to_der
130132

131-
assert validate_xml!(xml_text, "saml-schema-metadata-2.0.xsd")
133+
assert validate_xml!(xml_text, "saml-schema-metadata-2.0.xsd")
134+
end
135+
end
136+
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 2, key_descriptors.length
144+
assert_equal "encryption", key_descriptors[1].attribute("use").value
145+
146+
assert_equal 2, cert_nodes.length
147+
assert_equal cert_nodes[0].text, cert_nodes[1].text
148+
assert validate_xml!(xml_text, "saml-schema-metadata-2.0.xsd")
149+
end
132150
end
133151
end
134152

0 commit comments

Comments
 (0)