Commit 2231946
Changed files (2)
lib
saml
kit
spec
examples
lib/saml/kit/response.rb
@@ -1,5 +1,6 @@
module Saml
module Kit
+ # {include:file:spec/examples/response_spec.rb}
class Response < Document
include Respondable
extend Forwardable
spec/examples/response_spec.rb
@@ -2,8 +2,52 @@ require_relative './user'
RSpec.describe "Response" do
let(:user) { User.new(id: SecureRandom.uuid, email: "hello@example.com") }
+ let(:request) { Saml::Kit::AuthenticationRequest.build }
- it 'generates a response' do
+ it 'consumes a Response' do
+ raw_xml = <<-XML
+<?xml version="1.0" encoding="UTF-8"?>
+<Response xmlns="urn:oasis:names:tc:SAML:2.0:protocol" ID="_32594448-5d41-4e5b-87c5-ee32ef1f14f7" Version="2.0" IssueInstant="2017-12-23T18:13:58Z" Destination="" Consent="urn:oasis:names:tc:SAML:2.0:consent:unspecified" InResponseTo="_55236abc-636f-41d1-8c0d-81c5384786dd">
+ <Issuer xmlns="urn:oasis:names:tc:SAML:2.0:assertion">https://www.example.com/metadata</Issuer>
+ <Status>
+ <StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
+ </Status>
+ <Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_843f14bc-51e9-40d3-9861-23e59ccc8427" IssueInstant="2017-12-23T18:13:58Z" Version="2.0">
+ <Issuer>https://www.example.com/metadata</Issuer>
+ <Subject>
+ <NameID Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent">ed215a85-597f-4e74-a892-ac83c386190b</NameID>
+ <SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
+ <SubjectConfirmationData InResponseTo="_55236abc-636f-41d1-8c0d-81c5384786dd" NotOnOrAfter="2017-12-23T21:13:58Z" Recipient=""/>
+ </SubjectConfirmation>
+ </Subject>
+ <Conditions NotBefore="2017-12-23T18:13:58Z" NotOnOrAfter="2017-12-23T21:13:58Z">
+ <AudienceRestriction>
+ <Audience/>
+ </AudienceRestriction>
+ </Conditions>
+ <AuthnStatement AuthnInstant="2017-12-23T18:13:58Z" SessionIndex="_843f14bc-51e9-40d3-9861-23e59ccc8427" SessionNotOnOrAfter="2017-12-23T21:13:58Z">
+ <AuthnContext>
+ <AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</AuthnContextClassRef>
+ </AuthnContext>
+ </AuthnStatement>
+ </Assertion>
+</Response>
+ XML
+ response = Saml::Kit::Response.new(raw_xml)
+ expect(response.assertion.name_id).to eql('ed215a85-597f-4e74-a892-ac83c386190b')
+ expect(response.issuer).to eql("https://www.example.com/metadata")
+ end
+
+ it 'builds a Response document' do
+ response = Saml::Kit::Response.build(user, request) do |builder|
+ builder.issuer = "blah"
+ end
+
+ expect(response.issuer).to eql("blah")
+ expect(response.to_xml).to have_xpath("/samlp:Response/saml:Assertion/saml:Issuer[text()=\"blah\"]")
+ end
+
+ it 'generates a SAMLResponse' do
xml = Saml::Kit::Metadata.build_xml do |builder|
builder.contact_email = 'hi@example.com'
builder.organization_name = "Acme, Inc"
@@ -34,6 +78,7 @@ RSpec.describe "Response" do
allow(saml_request).to receive(:provider).and_return(sp)
url, saml_params = saml_request.response_for(user, binding: :http_post)
+
expect(url).to eql("https://www.example.com/consume")
expect(saml_params['SAMLResponse']).to be_present
end