Commit b454c60
Changed files (2)
lib
saml
spec
lib/saml/kit/service_provider_metadata.rb
@@ -12,20 +12,30 @@ module Saml
class Builder
attr_accessor :id, :entity_id, :acs_url
- def initialize
+ def initialize(configuration = Saml::Kit.configuration)
@id = SecureRandom.uuid
+ @configuration = configuration
end
def to_xml
+ signature = Signature.new(id)
xml = ::Builder::XmlMarkup.new
xml.instruct!
- xml.EntityDescriptor entity_descriptor_options do
+ xml.tag! 'md:EntityDescriptor', entity_descriptor_options do
+ signature.template(xml)
xml.tag! "md:SPSSODescriptor", descriptor_options do
xml.tag! "md:NameIDFormat", Namespaces::Formats::NameId::PERSISTENT
xml.tag! "md:AssertionConsumerService", Binding: Namespaces::Bindings::POST, Location: acs_url, index: "0", isDefault: "true"
+ xml.tag! "md:KeyDescriptor", use: "signing" do
+ xml.tag! "ds:KeyInfo", "xmlns:ds": Saml::Kit::Signature::XMLDSIG do
+ xml.tag! "ds:X509Data" do
+ xml.tag! "ds:X509Certificate", @configuration.stripped_certificate
+ end
+ end
+ end
end
end
- xml.target!
+ signature.finalize(xml)
end
def build
@@ -37,7 +47,7 @@ module Saml
def entity_descriptor_options
{
'xmlns:md': Namespaces::METADATA,
- ID: "_#{id}",
+ ID: id,
entityID: entity_id,
}
end
spec/saml/service_provider_metadata_spec.rb
@@ -35,6 +35,9 @@ RSpec.describe Saml::Kit::ServiceProviderMetadata do
expect(result['EntityDescriptor']['SPSSODescriptor']['AssertionConsumerService']['Location']).to eql(acs_url)
expect(result['EntityDescriptor']['SPSSODescriptor']['AssertionConsumerService']['isDefault']).to eql('true')
expect(result['EntityDescriptor']['SPSSODescriptor']['AssertionConsumerService']['index']).to eql('0')
+ expect(result['EntityDescriptor']['Signature']).to be_present
+ expect(result['EntityDescriptor']['SPSSODescriptor']['KeyDescriptor']['use']).to eql("signing")
+ expect(result['EntityDescriptor']['SPSSODescriptor']['KeyDescriptor']['KeyInfo']['X509Data']['X509Certificate']).to eql(Saml::Kit.configuration.stripped_certificate)
end
end
end