Commit bc911f6
Changed files (3)
app
spec
models
app/models/authentication_request.rb
@@ -7,6 +7,14 @@ class AuthenticationRequest
@hash = Hash.from_xml(@xml)
end
+ def id
+ raise NotImplementedError.new
+ end
+
+ def acs_url
+ raise NotImplementedError.new
+ end
+
def issuer
@hash['AuthnRequest']['Issuer']
end
app/models/saml_response.rb
@@ -32,6 +32,7 @@ class SamlResponse
Version: "2.0",
IssueInstant: Time.now.utc.iso8601,
Destination: request.acs_url,
+ InResponseTo: request.id,
}
xml.tag! "samlp:Response", options do |response|
end
spec/models/saml_response_spec.rb
@@ -4,7 +4,7 @@ describe SamlResponse do
describe ".for" do
subject { described_class }
let(:user) { double(:user) }
- let(:authentication_request) { double(acs_url: acs_url) }
+ let(:request) { double(id: SecureRandom.uuid, acs_url: acs_url) }
let(:acs_url) { "https://#{FFaker::Internet.domain_name}/acs" }
<<-XML
@@ -55,13 +55,14 @@ describe SamlResponse do
XML
it 'returns a proper response for the user' do
travel_to 1.second.from_now
- result = subject.for(user, authentication_request).to_xml
+ result = subject.for(user, request).to_xml
hash = Hash.from_xml(result)
expect(hash['Response']['ID']).to be_present
expect(hash['Response']['Version']).to eql('2.0')
expect(hash['Response']['IssueInstant']).to eql(Time.now.utc.iso8601)
expect(hash['Response']['Destination']).to eql(acs_url)
+ expect(hash['Response']['InResponseTo']).to eql(request.id)
end
end
end