signed_xml 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +17 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +29 -0
- data/Rakefile +1 -0
- data/lib/signed_xml/base64_transform.rb +9 -0
- data/lib/signed_xml/c14n_transform.rb +26 -0
- data/lib/signed_xml/digest_method_resolution.rb +15 -0
- data/lib/signed_xml/digest_transform.rb +17 -0
- data/lib/signed_xml/document.rb +36 -0
- data/lib/signed_xml/enveloped_signature_transform.rb +10 -0
- data/lib/signed_xml/reference.rb +59 -0
- data/lib/signed_xml/signature.rb +74 -0
- data/lib/signed_xml/signed_info.rb +17 -0
- data/lib/signed_xml/transformable.rb +13 -0
- data/lib/signed_xml/version.rb +3 -0
- data/lib/signed_xml.rb +16 -0
- data/signed_xml.gemspec +25 -0
- data/spec/resources/badly_signed_saml_response.xml +78 -0
- data/spec/resources/incorrect_digest_saml_response.xml +78 -0
- data/spec/resources/same_doc_reference.xml +38 -0
- data/spec/resources/same_doc_reference_template.xml +5 -0
- data/spec/resources/saml_response_template.xml +60 -0
- data/spec/resources/signed_saml_response.xml +78 -0
- data/spec/resources/test_cert.pem +28 -0
- data/spec/resources/test_key.pem +27 -0
- data/spec/resources/two_sig_doc.xml +9 -0
- data/spec/resources/unsigned_saml_response.xml +36 -0
- data/spec/signed_xml_document_spec.rb +94 -0
- data/spec/spec_helper.rb +8 -0
- metadata +157 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 Todd Thomas
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
# SignedXmlDocument
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
gem 'signed_xml_document'
|
10
|
+
|
11
|
+
And then execute:
|
12
|
+
|
13
|
+
$ bundle
|
14
|
+
|
15
|
+
Or install it yourself as:
|
16
|
+
|
17
|
+
$ gem install signed_xml_document
|
18
|
+
|
19
|
+
## Usage
|
20
|
+
|
21
|
+
TODO: Write usage instructions here
|
22
|
+
|
23
|
+
## Contributing
|
24
|
+
|
25
|
+
1. Fork it
|
26
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
27
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
28
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
29
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module SignedXml
|
2
|
+
class C14NTransform
|
3
|
+
include Nokogiri::XML
|
4
|
+
|
5
|
+
attr_reader :method
|
6
|
+
attr_reader :with_comments
|
7
|
+
|
8
|
+
def initialize(method = "http://www.w3.org/TR/2001/REC-xml-c14n-20010315")
|
9
|
+
method, with_comments = method.split('#')
|
10
|
+
@method = case method
|
11
|
+
when "http://www.w3.org/TR/2001/REC-xml-c14n-20010315" then XML_C14N_1_0
|
12
|
+
when "http://www.w3.org/2001/10/xml-exc-c14n" then XML_C14N_EXCLUSIVE_1_0
|
13
|
+
when "http://www.w3.org/2006/12/xml-c14n11" then XML_C14N_1_1
|
14
|
+
else raise ArgumentError.new("unknown canonicalization method #{method}")
|
15
|
+
end
|
16
|
+
|
17
|
+
@with_comments = !!with_comments
|
18
|
+
end
|
19
|
+
|
20
|
+
def apply(input)
|
21
|
+
raise ArgumentError.new("input #{input.inspect}:#{input.class} is not canonicalizable") unless input.respond_to?(:canonicalize)
|
22
|
+
|
23
|
+
input.canonicalize(method, nil, with_comments)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
|
3
|
+
module SignedXml
|
4
|
+
module DigestMethodResolution
|
5
|
+
include OpenSSL
|
6
|
+
|
7
|
+
def digester_for_id(id)
|
8
|
+
case id
|
9
|
+
when "http://www.w3.org/2000/09/xmldsig#sha1","http://www.w3.org/2000/09/xmldsig#rsa-sha1"
|
10
|
+
Digest::SHA1.new
|
11
|
+
else raise ArgumentError.new("unknown digest method #{id}")
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "openssl"
|
2
|
+
|
3
|
+
module SignedXml
|
4
|
+
class DigestTransform
|
5
|
+
include DigestMethodResolution
|
6
|
+
|
7
|
+
attr_reader :digest
|
8
|
+
|
9
|
+
def initialize(method_id)
|
10
|
+
@digest = digester_for_id(method_id)
|
11
|
+
end
|
12
|
+
|
13
|
+
def apply(input)
|
14
|
+
digest.digest(input)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require "openssl"
|
2
|
+
require "options"
|
3
|
+
|
4
|
+
module SignedXml
|
5
|
+
class Document
|
6
|
+
attr_reader :doc
|
7
|
+
|
8
|
+
def initialize(doc)
|
9
|
+
@doc = doc
|
10
|
+
end
|
11
|
+
|
12
|
+
def is_verifiable?
|
13
|
+
signatures.any?
|
14
|
+
end
|
15
|
+
|
16
|
+
def is_verified?(opts = {})
|
17
|
+
return false unless is_verifiable?
|
18
|
+
|
19
|
+
signatures.all?(&:is_verified?)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def signatures
|
25
|
+
@signatures ||= init_signatures
|
26
|
+
end
|
27
|
+
|
28
|
+
def init_signatures
|
29
|
+
signatures = []
|
30
|
+
doc.xpath("//ds:Signature", ds: XMLDSIG_NS).each do |signature_node|
|
31
|
+
signatures << Signature.new(signature_node)
|
32
|
+
end
|
33
|
+
signatures
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module SignedXml
|
2
|
+
class Reference
|
3
|
+
include Transformable
|
4
|
+
|
5
|
+
attr_reader :here, :start
|
6
|
+
|
7
|
+
def initialize(here)
|
8
|
+
@here = here
|
9
|
+
|
10
|
+
uri = here['URI']
|
11
|
+
case uri
|
12
|
+
when nil, ""
|
13
|
+
@start = here.document.root
|
14
|
+
when /^#/
|
15
|
+
id = uri.split('#').last
|
16
|
+
raise ArgumentError.new("XPointer expressions like #{id} are not yet supported") if id =~ /^xpointer/
|
17
|
+
# TODO: handle ID attrs with names other than 'ID'
|
18
|
+
@start = here.document.at_xpath("//*[@ID='#{id}']")
|
19
|
+
raise ArgumentError.new("no match found for ID #{id}") if @start.nil?
|
20
|
+
else raise ArgumentError.new("unsupported Reference URI #{uri}")
|
21
|
+
end
|
22
|
+
|
23
|
+
@transforms = init_transforms
|
24
|
+
end
|
25
|
+
|
26
|
+
def is_verified?
|
27
|
+
apply_transforms.chomp == digest_value
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def init_transforms
|
33
|
+
transforms = []
|
34
|
+
|
35
|
+
here.xpath('.//ds:Transform', ds: XMLDSIG_NS).each do |transform_node|
|
36
|
+
method = transform_node['Algorithm']
|
37
|
+
case method
|
38
|
+
when "http://www.w3.org/2000/09/xmldsig#enveloped-signature"
|
39
|
+
transforms << EnvelopedSignatureTransform.new
|
40
|
+
when %r{^http://.*c14n}
|
41
|
+
transforms << C14NTransform.new(method)
|
42
|
+
else raise ArgumentError.new("unknown transform method #{method}")
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# If no explicit c14n transform is specified, make sure we do one before digesting.
|
47
|
+
transforms << C14NTransform.new unless transforms.last.is_a? C14NTransform
|
48
|
+
|
49
|
+
digest_method = here.at_xpath('//ds:DigestMethod/@Algorithm', ds: XMLDSIG_NS).value.strip
|
50
|
+
transforms << DigestTransform.new(digest_method)
|
51
|
+
|
52
|
+
transforms << Base64Transform.new
|
53
|
+
end
|
54
|
+
|
55
|
+
def digest_value
|
56
|
+
@digest_value ||= here.at_xpath('ds:DigestValue', ds: XMLDSIG_NS).text.strip
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
require 'base64'
|
2
|
+
|
3
|
+
module SignedXml
|
4
|
+
class Signature
|
5
|
+
include DigestMethodResolution
|
6
|
+
|
7
|
+
attr_accessor :here
|
8
|
+
|
9
|
+
def initialize(here)
|
10
|
+
@here = here
|
11
|
+
end
|
12
|
+
|
13
|
+
def is_verified?
|
14
|
+
is_signed_info_verified? && are_reference_digests_verified?
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def is_signed_info_verified?
|
20
|
+
public_key.verify(digester_for_id(signed_info.signature_method), decoded_value, signed_info.apply_transforms)
|
21
|
+
end
|
22
|
+
|
23
|
+
def are_reference_digests_verified?
|
24
|
+
references.all?(&:is_verified?)
|
25
|
+
end
|
26
|
+
|
27
|
+
def references
|
28
|
+
@references ||= init_references
|
29
|
+
end
|
30
|
+
|
31
|
+
def init_references
|
32
|
+
references = []
|
33
|
+
|
34
|
+
here.xpath('//ds:Reference', ds: XMLDSIG_NS).each do |reference_node|
|
35
|
+
references << Reference.new(reference_node)
|
36
|
+
end
|
37
|
+
|
38
|
+
references
|
39
|
+
end
|
40
|
+
|
41
|
+
def decoded_value
|
42
|
+
@decoded_value ||= Base64.decode64 value
|
43
|
+
end
|
44
|
+
|
45
|
+
def value
|
46
|
+
@value ||= here.at_xpath('//ds:SignatureValue', ds: XMLDSIG_NS).text.strip
|
47
|
+
end
|
48
|
+
|
49
|
+
def signed_info
|
50
|
+
@signed_info ||= SignedInfo.new(here.at_xpath("//ds:SignedInfo", ds: XMLDSIG_NS))
|
51
|
+
end
|
52
|
+
|
53
|
+
def public_key
|
54
|
+
@public_key ||= x509_certificate.public_key
|
55
|
+
end
|
56
|
+
|
57
|
+
def x509_certificate
|
58
|
+
@x509_certificate ||= OpenSSL::X509::Certificate.new(certificate(x509_cert_data))
|
59
|
+
end
|
60
|
+
|
61
|
+
def x509_cert_data
|
62
|
+
@x509_cert_data ||= here.at_xpath("//ds:X509Certificate", ds: XMLDSIG_NS).text
|
63
|
+
end
|
64
|
+
|
65
|
+
def certificate(data)
|
66
|
+
"-----BEGIN CERTIFICATE-----\n#{wrap_text(data, 64)}-----END CERTIFICATE-----\n"
|
67
|
+
end
|
68
|
+
|
69
|
+
# http://blog.macromates.com/2006/wrapping-text-with-regular-expressions/
|
70
|
+
def wrap_text(txt, col = 80)
|
71
|
+
txt.gsub(/(.{1,#{col}})( +|$)\n?|(.{#{col}})/, "\\1\\3\n")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module SignedXml
|
2
|
+
class SignedInfo
|
3
|
+
include Transformable
|
4
|
+
|
5
|
+
attr_reader :start, :signature_method
|
6
|
+
|
7
|
+
def initialize(here)
|
8
|
+
@start = here
|
9
|
+
|
10
|
+
canonicalization_method = here.at_xpath('//ds:CanonicalizationMethod/@Algorithm', ds: XMLDSIG_NS).value.strip
|
11
|
+
|
12
|
+
transforms << C14NTransform.new(canonicalization_method)
|
13
|
+
|
14
|
+
@signature_method = here.at_xpath('//ds:SignatureMethod/@Algorithm', ds: XMLDSIG_NS).value.strip
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/signed_xml.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module SignedXml
|
4
|
+
XMLDSIG_NS = "http://www.w3.org/2000/09/xmldsig#"
|
5
|
+
|
6
|
+
autoload :Transformable, 'signed_xml/transformable'
|
7
|
+
autoload :Document, 'signed_xml/document'
|
8
|
+
autoload :Signature, 'signed_xml/signature'
|
9
|
+
autoload :SignedInfo, 'signed_xml/signed_info'
|
10
|
+
autoload :Reference, 'signed_xml/reference'
|
11
|
+
autoload :DigestMethodResolution, 'signed_xml/digest_method_resolution'
|
12
|
+
autoload :DigestTransform, 'signed_xml/digest_transform'
|
13
|
+
autoload :Base64Transform, 'signed_xml/base64_transform'
|
14
|
+
autoload :C14NTransform, 'signed_xml/c14n_transform'
|
15
|
+
autoload :EnvelopedSignatureTransform, 'signed_xml/enveloped_signature_transform'
|
16
|
+
end
|
data/signed_xml.gemspec
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'signed_xml/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "signed_xml"
|
8
|
+
gem.version = SignedXml::VERSION
|
9
|
+
gem.authors = ["Todd Thomas"]
|
10
|
+
gem.email = ["todd.thomas@openlogic.com"]
|
11
|
+
gem.description = %q{XML Signature verification}
|
12
|
+
gem.summary = %q{Provides [incomplete] support for verification of XML Signatures <http://www.w3.org/TR/xmldsig-core>.}
|
13
|
+
gem.homepage = ""
|
14
|
+
|
15
|
+
gem.files = `git ls-files`.split($/)
|
16
|
+
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
17
|
+
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
18
|
+
gem.require_paths = ["lib"]
|
19
|
+
|
20
|
+
gem.add_dependency "nokogiri", "~> 1.5"
|
21
|
+
gem.add_dependency "options"
|
22
|
+
|
23
|
+
gem.add_development_dependency "rake"
|
24
|
+
gem.add_development_dependency "rspec"
|
25
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<Response xmlns="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" IssueInstant="2003-04-17T00:46:02Z" Version="2.0" ID="_c7055387-af61-4fce-8b98-e2927324b306">
|
3
|
+
<saml:Issuer>https://www.opensaml.org/IDP"</saml:Issuer>
|
4
|
+
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
8
|
+
<ds:Reference URI="">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
</ds:Transforms>
|
12
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
|
13
|
+
<ds:DigestValue>otynz9RFK0/mrkztml+POU0P4Rw=</ds:DigestValue>
|
14
|
+
</ds:Reference>
|
15
|
+
</ds:SignedInfo>
|
16
|
+
<ds:SignatureValue>fMniqoW/jSH7isH7ka+79+WYeiE4O63mA7TdrqOTrh8Q+JZQMsYsbAnx5E7Fo4Fy
|
17
|
+
+2yE/6XgCnEUFUvyWK9J5vaS+qzoOH5RZeSDcaSZeM5rP2hW5lf7iTQG/9wLsQUX
|
18
|
+
KQRm1/pFgm7yetYr+gfK8yvUMR0pQc4h+vo4wKyQQYpHMlS97BWFoPEvi9F1M0Ld
|
19
|
+
7NxHSHUFGTLqm+664ZTYI3z1k2kZgsuZpwHYCYOx185U383jnW1DruwLD8KE6Nxn
|
20
|
+
Wd9imhxAiCV2CMQkjxIkrBM8du47rm+kDToYVgOn9gU15gYAmXUN/4MwF/yvYpQE
|
21
|
+
sAs0VcNWD5PRjIviKbRh2Q==</ds:SignatureValue>
|
22
|
+
<ds:KeyInfo>
|
23
|
+
<ds:X509Data>
|
24
|
+
|
25
|
+
<ds:X509Certificate>MIIExDCCA6ygAwIBAgIJAJsG6scSiBu+MA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD
|
26
|
+
VQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEUMBIGA1UEBxMLU3ByaW5nZmll
|
27
|
+
bGQxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDETMBEGA1UECxQK
|
28
|
+
QXJyciAmIERlZTELMAkGA1UEAxMCTWUxHTAbBgkqhkiG9w0BCQEWDm1lQGV4YW1w
|
29
|
+
bGUub3JnMB4XDTEzMDQxMTAwNTc1MloXDTQwMDgyNzAwNTc1MlowgZwxCzAJBgNV
|
30
|
+
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJpbmdmaWVs
|
31
|
+
ZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQLFApB
|
32
|
+
cnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVAZXhhbXBs
|
33
|
+
ZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZbhwD884KG1Aj
|
34
|
+
ZENyOQw1TpqvMkkxMSIFQwSMPg81JIDgPifCXXHimiNheo99K4TnLAV4V+6sLsP8
|
35
|
+
c2pQFr57mDSBo1x1JjSLR/LGD/scqQqzSXNXLNffF7FbH28/wL9+lBrMNxEh5LvT
|
36
|
+
Cm+rmnAHdJjGK//BbLE7Vuek3irquUo3OF6HidORr2b86ec4I2gjien3kwgmYc0n
|
37
|
+
7pxjReEeKqpoZ1ytB3PjDlAwJchCTs6i+bmQJ5xqyDn+OHTZutCVCE9DwBLThfGr
|
38
|
+
2j+c7po42EucuS1GMEbHWbEcSCruhQY51iR+hc54TRc/GQbwfVyfOBMJ98s5TASA
|
39
|
+
h0Sfw2DlAgMBAAGjggEFMIIBATAdBgNVHQ4EFgQUbuT5ExXORlqEIJRWCNvHgBig
|
40
|
+
I9swgdEGA1UdIwSByTCBxoAUbuT5ExXORlqEIJRWCNvHgBigI9uhgaKkgZ8wgZwx
|
41
|
+
CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJp
|
42
|
+
bmdmaWVsZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYD
|
43
|
+
VQQLFApBcnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVA
|
44
|
+
ZXhhbXBsZS5vcmeCCQCbBurHEogbvjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
|
45
|
+
BQUAA4IBAQABGQp+S8TgiPkMqOoHiosApgs/SttQfRZVlmhoqsJQ554xkui75PIo
|
46
|
+
RMHd42Ft8PO5aQiqXe6sbGJh9e78pSqdhytrlwIf4OSomJ2ghRGKoPESBnMQGxYT
|
47
|
+
vMx/0BvjVj8rNSFmVgTV+foSkJj2tJnr/9ZfYbRPybDRYvDhfnlE7SpfBanKK2r+
|
48
|
+
VpLSlm1c6d5cYA5xKUtQgV9wKbMZLl5B75S3CXz1K6TujHN3K/B3a4Hc7AknWqFd
|
49
|
+
qsWDWKJjyH3XzQkpPT00TqQOaM9gbYqsLXmiuLzYXV1JQhU1vs29mIIFbtQK0jYd
|
50
|
+
YEcPFLoaQoTClLMt9R+6wrJvJ9loh6P8</ds:X509Certificate>
|
51
|
+
</ds:X509Data>
|
52
|
+
</ds:KeyInfo>
|
53
|
+
</ds:Signature>
|
54
|
+
<Status>
|
55
|
+
<StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
|
56
|
+
</Status>
|
57
|
+
<Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc" IssueInstant="2003-04-17T00:46:02Z" Version="2.0">
|
58
|
+
<Issuer>https://www.opensaml.org/IDP</Issuer>
|
59
|
+
<Subject>
|
60
|
+
<NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
|
61
|
+
scott@example.org
|
62
|
+
</NameID>
|
63
|
+
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"/>
|
64
|
+
</Subject>
|
65
|
+
<Conditions NotBefore="2003-04-17T00:46:02Z" NotOnOrAfter="2003-04-17T00:51:02Z">
|
66
|
+
<AudienceRestriction>
|
67
|
+
<Audience>http://www.opensaml.org/SP</Audience>
|
68
|
+
</AudienceRestriction>
|
69
|
+
</Conditions>
|
70
|
+
<AuthnStatement AuthnInstant="2003-04-17T00:46:00Z">
|
71
|
+
<AuthnContext>
|
72
|
+
<AuthnContextClassRef>
|
73
|
+
urn:oasis:names:tc:SAML:2.0:ac:classes:Password
|
74
|
+
</AuthnContextClassRef>
|
75
|
+
</AuthnContext>
|
76
|
+
</AuthnStatement>
|
77
|
+
</Assertion>
|
78
|
+
</Response>
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<Response xmlns="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" IssueInstant="2003-04-17T00:46:02Z" Version="2.0" ID="_c7055387-af61-4fce-8b98-e2927324b306">
|
3
|
+
<saml:Issuer>https://www.opensaml.org/IDP"</saml:Issuer>
|
4
|
+
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
8
|
+
<ds:Reference URI="">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
</ds:Transforms>
|
12
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
|
13
|
+
<ds:DigestValue>otynz9RFK0/mrZztml+POU0P4Rw=</ds:DigestValue>
|
14
|
+
</ds:Reference>
|
15
|
+
</ds:SignedInfo>
|
16
|
+
<ds:SignatureValue>fMniqoW/jSH7isH7ka+79+WYeiE4O63mA7TdrqOTrh8Q+JZQMsYsbAnx5E7Fo4Fy
|
17
|
+
+2yE/6XgCnEUFUvyWK9J5vaS+qzoOH5RZeSDcaSZeM5rP2hW5lf7iTQG/9wLsQUX
|
18
|
+
KQRm1/pFgm7yetYr+gfK8yvUMR0pQc4h+vo4wKyQQYpHMlS97BWFoPEvi9F1M0Ld
|
19
|
+
7NxHSHUFGTLqm+664ZTYI3z1k2kcgsuZpwHYCYOx185U383jnW1DruwLD8KE6Nxn
|
20
|
+
Wd9imhxAiCV2CMQkjxIkrBM8du47rm+kDToYVgOn9gU15gYAmXUN/4MwF/yvYpQE
|
21
|
+
sAs0VcNWD5PRjIviKbRh2Q==</ds:SignatureValue>
|
22
|
+
<ds:KeyInfo>
|
23
|
+
<ds:X509Data>
|
24
|
+
|
25
|
+
<ds:X509Certificate>MIIExDCCA6ygAwIBAgIJAJsG6scSiBu+MA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD
|
26
|
+
VQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEUMBIGA1UEBxMLU3ByaW5nZmll
|
27
|
+
bGQxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDETMBEGA1UECxQK
|
28
|
+
QXJyciAmIERlZTELMAkGA1UEAxMCTWUxHTAbBgkqhkiG9w0BCQEWDm1lQGV4YW1w
|
29
|
+
bGUub3JnMB4XDTEzMDQxMTAwNTc1MloXDTQwMDgyNzAwNTc1MlowgZwxCzAJBgNV
|
30
|
+
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJpbmdmaWVs
|
31
|
+
ZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQLFApB
|
32
|
+
cnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVAZXhhbXBs
|
33
|
+
ZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZbhwD884KG1Aj
|
34
|
+
ZENyOQw1TpqvMkkxMSIFQwSMPg81JIDgPifCXXHimiNheo99K4TnLAV4V+6sLsP8
|
35
|
+
c2pQFr57mDSBo1x1JjSLR/LGD/scqQqzSXNXLNffF7FbH28/wL9+lBrMNxEh5LvT
|
36
|
+
Cm+rmnAHdJjGK//BbLE7Vuek3irquUo3OF6HidORr2b86ec4I2gjien3kwgmYc0n
|
37
|
+
7pxjReEeKqpoZ1ytB3PjDlAwJchCTs6i+bmQJ5xqyDn+OHTZutCVCE9DwBLThfGr
|
38
|
+
2j+c7po42EucuS1GMEbHWbEcSCruhQY51iR+hc54TRc/GQbwfVyfOBMJ98s5TASA
|
39
|
+
h0Sfw2DlAgMBAAGjggEFMIIBATAdBgNVHQ4EFgQUbuT5ExXORlqEIJRWCNvHgBig
|
40
|
+
I9swgdEGA1UdIwSByTCBxoAUbuT5ExXORlqEIJRWCNvHgBigI9uhgaKkgZ8wgZwx
|
41
|
+
CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJp
|
42
|
+
bmdmaWVsZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYD
|
43
|
+
VQQLFApBcnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVA
|
44
|
+
ZXhhbXBsZS5vcmeCCQCbBurHEogbvjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
|
45
|
+
BQUAA4IBAQABGQp+S8TgiPkMqOoHiosApgs/SttQfRZVlmhoqsJQ554xkui75PIo
|
46
|
+
RMHd42Ft8PO5aQiqXe6sbGJh9e78pSqdhytrlwIf4OSomJ2ghRGKoPESBnMQGxYT
|
47
|
+
vMx/0BvjVj8rNSFmVgTV+foSkJj2tJnr/9ZfYbRPybDRYvDhfnlE7SpfBanKK2r+
|
48
|
+
VpLSlm1c6d5cYA5xKUtQgV9wKbMZLl5B75S3CXz1K6TujHN3K/B3a4Hc7AknWqFd
|
49
|
+
qsWDWKJjyH3XzQkpPT00TqQOaM9gbYqsLXmiuLzYXV1JQhU1vs29mIIFbtQK0jYd
|
50
|
+
YEcPFLoaQoTClLMt9R+6wrJvJ9loh6P8</ds:X509Certificate>
|
51
|
+
</ds:X509Data>
|
52
|
+
</ds:KeyInfo>
|
53
|
+
</ds:Signature>
|
54
|
+
<Status>
|
55
|
+
<StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
|
56
|
+
</Status>
|
57
|
+
<Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc" IssueInstant="2003-04-17T00:46:02Z" Version="2.0">
|
58
|
+
<Issuer>https://www.opensaml.org/IDP</Issuer>
|
59
|
+
<Subject>
|
60
|
+
<NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
|
61
|
+
scott@example.org
|
62
|
+
</NameID>
|
63
|
+
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"/>
|
64
|
+
</Subject>
|
65
|
+
<Conditions NotBefore="2003-04-17T00:46:02Z" NotOnOrAfter="2003-04-17T00:51:02Z">
|
66
|
+
<AudienceRestriction>
|
67
|
+
<Audience>http://www.opensaml.org/SP</Audience>
|
68
|
+
</AudienceRestriction>
|
69
|
+
</Conditions>
|
70
|
+
<AuthnStatement AuthnInstant="2003-04-17T00:46:00Z">
|
71
|
+
<AuthnContext>
|
72
|
+
<AuthnContextClassRef>
|
73
|
+
urn:oasis:names:tc:SAML:2.0:ac:classes:Password
|
74
|
+
</AuthnContextClassRef>
|
75
|
+
</AuthnContext>
|
76
|
+
</AuthnStatement>
|
77
|
+
</Assertion>
|
78
|
+
</Response>
|
@@ -0,0 +1,38 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_dd2d35dad58d4ebb9e3ec8e85d3e234da2cd639962" Version="2.0" IssueInstant="2013-04-08T23:13:22Z" Destination="http://localhost:3000/saml-login" InResponseTo="83767498-2df3-4035-b0a5-8b40212b8fd7"><saml:Issuer>http://localhost/simplesaml/saml2/idp/metadata.php</saml:Issuer><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
|
3
|
+
<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
4
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
5
|
+
<ds:Reference URI="#_dd2d35dad58d4ebb9e3ec8e85d3e234da2cd639962"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>MNf3EJFKtNqL4VLmjQ3ie/quaEY=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>yrvpPF7jkXgzu00ro5vY3gpHDzP2rsXdNL6aKwlMgjwMF4EG4RxlmYioGS7ioxyo
|
6
|
+
AMCF7TUI7NH5CrVEXM56Rl50uEVLsV9ePvyW1OkfxdUrzJtg9fzAW9OwBj/Xa6Kv
|
7
|
+
kfvFu2SND/Ak2JV5GJxBI09fANwrq20xGgtQ3gB8XlSArT+Te4XWxWwViCkIq8pQ
|
8
|
+
llZYpN5wba0cJ5gF8ukw1Ypf8Do/fQGxjp50C4wDJ557/TwjBZyqJGXOcbkijb7i
|
9
|
+
Mit++q4AfEO1zaDT+PbY4YrqH1gUxBLdCcrZI/EakaJHFjdwk43+yrVWPLRb2OUS
|
10
|
+
yF1bxdhBTEWz0c7KtAhjmA==</ds:SignatureValue>
|
11
|
+
<ds:KeyInfo><ds:X509Data>
|
12
|
+
<ds:X509Certificate>MIIExDCCA6ygAwIBAgIJAJsG6scSiBu+MA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD
|
13
|
+
VQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEUMBIGA1UEBxMLU3ByaW5nZmll
|
14
|
+
bGQxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDETMBEGA1UECxQK
|
15
|
+
QXJyciAmIERlZTELMAkGA1UEAxMCTWUxHTAbBgkqhkiG9w0BCQEWDm1lQGV4YW1w
|
16
|
+
bGUub3JnMB4XDTEzMDQxMTAwNTc1MloXDTQwMDgyNzAwNTc1MlowgZwxCzAJBgNV
|
17
|
+
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJpbmdmaWVs
|
18
|
+
ZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQLFApB
|
19
|
+
cnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVAZXhhbXBs
|
20
|
+
ZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZbhwD884KG1Aj
|
21
|
+
ZENyOQw1TpqvMkkxMSIFQwSMPg81JIDgPifCXXHimiNheo99K4TnLAV4V+6sLsP8
|
22
|
+
c2pQFr57mDSBo1x1JjSLR/LGD/scqQqzSXNXLNffF7FbH28/wL9+lBrMNxEh5LvT
|
23
|
+
Cm+rmnAHdJjGK//BbLE7Vuek3irquUo3OF6HidORr2b86ec4I2gjien3kwgmYc0n
|
24
|
+
7pxjReEeKqpoZ1ytB3PjDlAwJchCTs6i+bmQJ5xqyDn+OHTZutCVCE9DwBLThfGr
|
25
|
+
2j+c7po42EucuS1GMEbHWbEcSCruhQY51iR+hc54TRc/GQbwfVyfOBMJ98s5TASA
|
26
|
+
h0Sfw2DlAgMBAAGjggEFMIIBATAdBgNVHQ4EFgQUbuT5ExXORlqEIJRWCNvHgBig
|
27
|
+
I9swgdEGA1UdIwSByTCBxoAUbuT5ExXORlqEIJRWCNvHgBigI9uhgaKkgZ8wgZwx
|
28
|
+
CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJp
|
29
|
+
bmdmaWVsZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYD
|
30
|
+
VQQLFApBcnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVA
|
31
|
+
ZXhhbXBsZS5vcmeCCQCbBurHEogbvjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
|
32
|
+
BQUAA4IBAQABGQp+S8TgiPkMqOoHiosApgs/SttQfRZVlmhoqsJQ554xkui75PIo
|
33
|
+
RMHd42Ft8PO5aQiqXe6sbGJh9e78pSqdhytrlwIf4OSomJ2ghRGKoPESBnMQGxYT
|
34
|
+
vMx/0BvjVj8rNSFmVgTV+foSkJj2tJnr/9ZfYbRPybDRYvDhfnlE7SpfBanKK2r+
|
35
|
+
VpLSlm1c6d5cYA5xKUtQgV9wKbMZLl5B75S3CXz1K6TujHN3K/B3a4Hc7AknWqFd
|
36
|
+
qsWDWKJjyH3XzQkpPT00TqQOaM9gbYqsLXmiuLzYXV1JQhU1vs29mIIFbtQK0jYd
|
37
|
+
YEcPFLoaQoTClLMt9R+6wrJvJ9loh6P8</ds:X509Certificate>
|
38
|
+
</ds:X509Data></ds:KeyInfo></ds:Signature><samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status><saml:Assertion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" ID="_6f56d840d8df3697749fc533c9efac5866d5b88dde" Version="2.0" IssueInstant="2013-04-08T23:13:22Z"><saml:Issuer>http://localhost/simplesaml/saml2/idp/metadata.php</saml:Issuer><saml:Subject><saml:NameID SPNameQualifier="http://localhost:3000/" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">_3c448bd72f639960c116dc6339a4930e7a4a3e9f3c</saml:NameID><saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><saml:SubjectConfirmationData NotOnOrAfter="2013-04-08T23:18:22Z" Recipient="http://localhost:3000/saml-login" InResponseTo="83767498-2df3-4035-b0a5-8b40212b8fd7"/></saml:SubjectConfirmation></saml:Subject><saml:Conditions NotBefore="2013-04-08T23:12:52Z" NotOnOrAfter="2013-04-08T23:18:22Z"><saml:AudienceRestriction><saml:Audience>http://localhost:3000/</saml:Audience></saml:AudienceRestriction></saml:Conditions><saml:AuthnStatement AuthnInstant="2013-04-08T23:12:38Z" SessionNotOnOrAfter="2013-04-09T07:13:22Z" SessionIndex="_0c21a3bb421aefe16d6278b10c7924a5d66141922b"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement><saml:AttributeStatement><saml:Attribute Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"><saml:AttributeValue xsi:type="xs:string">todd.thomas@openlogic.com</saml:AttributeValue></saml:Attribute></saml:AttributeStatement></saml:Assertion></samlp:Response>
|
@@ -0,0 +1,5 @@
|
|
1
|
+
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_dd2d35dad58d4ebb9e3ec8e85d3e234da2cd639962" Version="2.0" IssueInstant="2013-04-08T23:13:22Z" Destination="http://localhost:3000/saml-login" InResponseTo="83767498-2df3-4035-b0a5-8b40212b8fd7"><saml:Issuer>http://localhost/simplesaml/saml2/idp/metadata.php</saml:Issuer><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
|
2
|
+
<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
3
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
4
|
+
<ds:Reference URI="#_dd2d35dad58d4ebb9e3ec8e85d3e234da2cd639962"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue/></ds:Reference></ds:SignedInfo><ds:SignatureValue/>
|
5
|
+
<ds:KeyInfo><ds:X509Data><ds:X509Certificate/></ds:X509Data></ds:KeyInfo></ds:Signature><samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status><saml:Assertion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" ID="_6f56d840d8df3697749fc533c9efac5866d5b88dde" Version="2.0" IssueInstant="2013-04-08T23:13:22Z"><saml:Issuer>http://localhost/simplesaml/saml2/idp/metadata.php</saml:Issuer><saml:Subject><saml:NameID SPNameQualifier="http://localhost:3000/" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">_3c448bd72f639960c116dc6339a4930e7a4a3e9f3c</saml:NameID><saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><saml:SubjectConfirmationData NotOnOrAfter="2013-04-08T23:18:22Z" Recipient="http://localhost:3000/saml-login" InResponseTo="83767498-2df3-4035-b0a5-8b40212b8fd7"/></saml:SubjectConfirmation></saml:Subject><saml:Conditions NotBefore="2013-04-08T23:12:52Z" NotOnOrAfter="2013-04-08T23:18:22Z"><saml:AudienceRestriction><saml:Audience>http://localhost:3000/</saml:Audience></saml:AudienceRestriction></saml:Conditions><saml:AuthnStatement AuthnInstant="2013-04-08T23:12:38Z" SessionNotOnOrAfter="2013-04-09T07:13:22Z" SessionIndex="_0c21a3bb421aefe16d6278b10c7924a5d66141922b"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement><saml:AttributeStatement><saml:Attribute Name="email" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"><saml:AttributeValue xsi:type="xs:string">todd.thomas@openlogic.com</saml:AttributeValue></saml:Attribute></saml:AttributeStatement></saml:Assertion></samlp:Response>
|
@@ -0,0 +1,60 @@
|
|
1
|
+
<Response
|
2
|
+
IssueInstant="2003-04-17T00:46:02Z" Version="2.0"
|
3
|
+
ID="_c7055387-af61-4fce-8b98-e2927324b306"
|
4
|
+
xmlns="urn:oasis:names:tc:SAML:2.0:protocol"
|
5
|
+
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
|
6
|
+
<saml:Issuer>https://www.opensaml.org/IDP"</saml:Issuer>
|
7
|
+
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
|
8
|
+
<ds:SignedInfo>
|
9
|
+
<ds:CanonicalizationMethod
|
10
|
+
Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
11
|
+
<ds:SignatureMethod
|
12
|
+
Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
13
|
+
<ds:Reference URI="">
|
14
|
+
<ds:Transforms>
|
15
|
+
<ds:Transform
|
16
|
+
Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
17
|
+
</ds:Transforms>
|
18
|
+
<ds:DigestMethod
|
19
|
+
Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
|
20
|
+
<ds:DigestValue/>
|
21
|
+
</ds:Reference>
|
22
|
+
</ds:SignedInfo>
|
23
|
+
<ds:SignatureValue/>
|
24
|
+
<ds:KeyInfo>
|
25
|
+
<ds:X509Data>
|
26
|
+
<ds:X509Certificate>
|
27
|
+
</ds:X509Certificate>
|
28
|
+
</ds:X509Data>
|
29
|
+
</ds:KeyInfo>
|
30
|
+
</ds:Signature>
|
31
|
+
<Status>
|
32
|
+
<StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
|
33
|
+
</Status>
|
34
|
+
<Assertion ID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc"
|
35
|
+
IssueInstant="2003-04-17T00:46:02Z" Version="2.0"
|
36
|
+
xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
|
37
|
+
<Issuer>https://www.opensaml.org/IDP</Issuer>
|
38
|
+
<Subject>
|
39
|
+
<NameID
|
40
|
+
Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
|
41
|
+
scott@example.org
|
42
|
+
</NameID>
|
43
|
+
<SubjectConfirmation
|
44
|
+
Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"/>
|
45
|
+
</Subject>
|
46
|
+
<Conditions NotBefore="2003-04-17T00:46:02Z"
|
47
|
+
NotOnOrAfter="2003-04-17T00:51:02Z">
|
48
|
+
<AudienceRestriction>
|
49
|
+
<Audience>http://www.opensaml.org/SP</Audience>
|
50
|
+
</AudienceRestriction>
|
51
|
+
</Conditions>
|
52
|
+
<AuthnStatement AuthnInstant="2003-04-17T00:46:00Z">
|
53
|
+
<AuthnContext>
|
54
|
+
<AuthnContextClassRef>
|
55
|
+
urn:oasis:names:tc:SAML:2.0:ac:classes:Password
|
56
|
+
</AuthnContextClassRef>
|
57
|
+
</AuthnContext>
|
58
|
+
</AuthnStatement>
|
59
|
+
</Assertion>
|
60
|
+
</Response>
|
@@ -0,0 +1,78 @@
|
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
<Response xmlns="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" IssueInstant="2003-04-17T00:46:02Z" Version="2.0" ID="_c7055387-af61-4fce-8b98-e2927324b306">
|
3
|
+
<saml:Issuer>https://www.opensaml.org/IDP"</saml:Issuer>
|
4
|
+
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
|
5
|
+
<ds:SignedInfo>
|
6
|
+
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
8
|
+
<ds:Reference URI="">
|
9
|
+
<ds:Transforms>
|
10
|
+
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
11
|
+
</ds:Transforms>
|
12
|
+
<ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
|
13
|
+
<ds:DigestValue>otynz9RFK0/mrkztml+POU0P4Rw=</ds:DigestValue>
|
14
|
+
</ds:Reference>
|
15
|
+
</ds:SignedInfo>
|
16
|
+
<ds:SignatureValue>fMniqoW/jSH7isH7ka+79+WYeiE4O63mA7TdrqOTrh8Q+JZQMsYsbAnx5E7Fo4Fy
|
17
|
+
+2yE/6XgCnEUFUvyWK9J5vaS+qzoOH5RZeSDcaSZeM5rP2hW5lf7iTQG/9wLsQUX
|
18
|
+
KQRm1/pFgm7yetYr+gfK8yvUMR0pQc4h+vo4wKyQQYpHMlS97BWFoPEvi9F1M0Ld
|
19
|
+
7NxHSHUFGTLqm+664ZTYI3z1k2kcgsuZpwHYCYOx185U383jnW1DruwLD8KE6Nxn
|
20
|
+
Wd9imhxAiCV2CMQkjxIkrBM8du47rm+kDToYVgOn9gU15gYAmXUN/4MwF/yvYpQE
|
21
|
+
sAs0VcNWD5PRjIviKbRh2Q==</ds:SignatureValue>
|
22
|
+
<ds:KeyInfo>
|
23
|
+
<ds:X509Data>
|
24
|
+
|
25
|
+
<ds:X509Certificate>MIIExDCCA6ygAwIBAgIJAJsG6scSiBu+MA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD
|
26
|
+
VQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEUMBIGA1UEBxMLU3ByaW5nZmll
|
27
|
+
bGQxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDETMBEGA1UECxQK
|
28
|
+
QXJyciAmIERlZTELMAkGA1UEAxMCTWUxHTAbBgkqhkiG9w0BCQEWDm1lQGV4YW1w
|
29
|
+
bGUub3JnMB4XDTEzMDQxMTAwNTc1MloXDTQwMDgyNzAwNTc1MlowgZwxCzAJBgNV
|
30
|
+
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJpbmdmaWVs
|
31
|
+
ZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQLFApB
|
32
|
+
cnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVAZXhhbXBs
|
33
|
+
ZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZbhwD884KG1Aj
|
34
|
+
ZENyOQw1TpqvMkkxMSIFQwSMPg81JIDgPifCXXHimiNheo99K4TnLAV4V+6sLsP8
|
35
|
+
c2pQFr57mDSBo1x1JjSLR/LGD/scqQqzSXNXLNffF7FbH28/wL9+lBrMNxEh5LvT
|
36
|
+
Cm+rmnAHdJjGK//BbLE7Vuek3irquUo3OF6HidORr2b86ec4I2gjien3kwgmYc0n
|
37
|
+
7pxjReEeKqpoZ1ytB3PjDlAwJchCTs6i+bmQJ5xqyDn+OHTZutCVCE9DwBLThfGr
|
38
|
+
2j+c7po42EucuS1GMEbHWbEcSCruhQY51iR+hc54TRc/GQbwfVyfOBMJ98s5TASA
|
39
|
+
h0Sfw2DlAgMBAAGjggEFMIIBATAdBgNVHQ4EFgQUbuT5ExXORlqEIJRWCNvHgBig
|
40
|
+
I9swgdEGA1UdIwSByTCBxoAUbuT5ExXORlqEIJRWCNvHgBigI9uhgaKkgZ8wgZwx
|
41
|
+
CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJp
|
42
|
+
bmdmaWVsZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYD
|
43
|
+
VQQLFApBcnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVA
|
44
|
+
ZXhhbXBsZS5vcmeCCQCbBurHEogbvjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
|
45
|
+
BQUAA4IBAQABGQp+S8TgiPkMqOoHiosApgs/SttQfRZVlmhoqsJQ554xkui75PIo
|
46
|
+
RMHd42Ft8PO5aQiqXe6sbGJh9e78pSqdhytrlwIf4OSomJ2ghRGKoPESBnMQGxYT
|
47
|
+
vMx/0BvjVj8rNSFmVgTV+foSkJj2tJnr/9ZfYbRPybDRYvDhfnlE7SpfBanKK2r+
|
48
|
+
VpLSlm1c6d5cYA5xKUtQgV9wKbMZLl5B75S3CXz1K6TujHN3K/B3a4Hc7AknWqFd
|
49
|
+
qsWDWKJjyH3XzQkpPT00TqQOaM9gbYqsLXmiuLzYXV1JQhU1vs29mIIFbtQK0jYd
|
50
|
+
YEcPFLoaQoTClLMt9R+6wrJvJ9loh6P8</ds:X509Certificate>
|
51
|
+
</ds:X509Data>
|
52
|
+
</ds:KeyInfo>
|
53
|
+
</ds:Signature>
|
54
|
+
<Status>
|
55
|
+
<StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
|
56
|
+
</Status>
|
57
|
+
<Assertion xmlns="urn:oasis:names:tc:SAML:2.0:assertion" ID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc" IssueInstant="2003-04-17T00:46:02Z" Version="2.0">
|
58
|
+
<Issuer>https://www.opensaml.org/IDP</Issuer>
|
59
|
+
<Subject>
|
60
|
+
<NameID Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
|
61
|
+
scott@example.org
|
62
|
+
</NameID>
|
63
|
+
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"/>
|
64
|
+
</Subject>
|
65
|
+
<Conditions NotBefore="2003-04-17T00:46:02Z" NotOnOrAfter="2003-04-17T00:51:02Z">
|
66
|
+
<AudienceRestriction>
|
67
|
+
<Audience>http://www.opensaml.org/SP</Audience>
|
68
|
+
</AudienceRestriction>
|
69
|
+
</Conditions>
|
70
|
+
<AuthnStatement AuthnInstant="2003-04-17T00:46:00Z">
|
71
|
+
<AuthnContext>
|
72
|
+
<AuthnContextClassRef>
|
73
|
+
urn:oasis:names:tc:SAML:2.0:ac:classes:Password
|
74
|
+
</AuthnContextClassRef>
|
75
|
+
</AuthnContext>
|
76
|
+
</AuthnStatement>
|
77
|
+
</Assertion>
|
78
|
+
</Response>
|
@@ -0,0 +1,28 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIExDCCA6ygAwIBAgIJAJsG6scSiBu+MA0GCSqGSIb3DQEBBQUAMIGcMQswCQYD
|
3
|
+
VQQGEwJBVTETMBEGA1UECBMKU29tZS1TdGF0ZTEUMBIGA1UEBxMLU3ByaW5nZmll
|
4
|
+
bGQxITAfBgNVBAoTGEludGVybmV0IFdpZGdpdHMgUHR5IEx0ZDETMBEGA1UECxQK
|
5
|
+
QXJyciAmIERlZTELMAkGA1UEAxMCTWUxHTAbBgkqhkiG9w0BCQEWDm1lQGV4YW1w
|
6
|
+
bGUub3JnMB4XDTEzMDQxMTAwNTc1MloXDTQwMDgyNzAwNTc1MlowgZwxCzAJBgNV
|
7
|
+
BAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJpbmdmaWVs
|
8
|
+
ZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYDVQQLFApB
|
9
|
+
cnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVAZXhhbXBs
|
10
|
+
ZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZbhwD884KG1Aj
|
11
|
+
ZENyOQw1TpqvMkkxMSIFQwSMPg81JIDgPifCXXHimiNheo99K4TnLAV4V+6sLsP8
|
12
|
+
c2pQFr57mDSBo1x1JjSLR/LGD/scqQqzSXNXLNffF7FbH28/wL9+lBrMNxEh5LvT
|
13
|
+
Cm+rmnAHdJjGK//BbLE7Vuek3irquUo3OF6HidORr2b86ec4I2gjien3kwgmYc0n
|
14
|
+
7pxjReEeKqpoZ1ytB3PjDlAwJchCTs6i+bmQJ5xqyDn+OHTZutCVCE9DwBLThfGr
|
15
|
+
2j+c7po42EucuS1GMEbHWbEcSCruhQY51iR+hc54TRc/GQbwfVyfOBMJ98s5TASA
|
16
|
+
h0Sfw2DlAgMBAAGjggEFMIIBATAdBgNVHQ4EFgQUbuT5ExXORlqEIJRWCNvHgBig
|
17
|
+
I9swgdEGA1UdIwSByTCBxoAUbuT5ExXORlqEIJRWCNvHgBigI9uhgaKkgZ8wgZwx
|
18
|
+
CzAJBgNVBAYTAkFVMRMwEQYDVQQIEwpTb21lLVN0YXRlMRQwEgYDVQQHEwtTcHJp
|
19
|
+
bmdmaWVsZDEhMB8GA1UEChMYSW50ZXJuZXQgV2lkZ2l0cyBQdHkgTHRkMRMwEQYD
|
20
|
+
VQQLFApBcnJyICYgRGVlMQswCQYDVQQDEwJNZTEdMBsGCSqGSIb3DQEJARYObWVA
|
21
|
+
ZXhhbXBsZS5vcmeCCQCbBurHEogbvjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEB
|
22
|
+
BQUAA4IBAQABGQp+S8TgiPkMqOoHiosApgs/SttQfRZVlmhoqsJQ554xkui75PIo
|
23
|
+
RMHd42Ft8PO5aQiqXe6sbGJh9e78pSqdhytrlwIf4OSomJ2ghRGKoPESBnMQGxYT
|
24
|
+
vMx/0BvjVj8rNSFmVgTV+foSkJj2tJnr/9ZfYbRPybDRYvDhfnlE7SpfBanKK2r+
|
25
|
+
VpLSlm1c6d5cYA5xKUtQgV9wKbMZLl5B75S3CXz1K6TujHN3K/B3a4Hc7AknWqFd
|
26
|
+
qsWDWKJjyH3XzQkpPT00TqQOaM9gbYqsLXmiuLzYXV1JQhU1vs29mIIFbtQK0jYd
|
27
|
+
YEcPFLoaQoTClLMt9R+6wrJvJ9loh6P8
|
28
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,27 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIIEowIBAAKCAQEA2W4cA/POChtQI2RDcjkMNU6arzJJMTEiBUMEjD4PNSSA4D4n
|
3
|
+
wl1x4pojYXqPfSuE5ywFeFfurC7D/HNqUBa+e5g0gaNcdSY0i0fyxg/7HKkKs0lz
|
4
|
+
VyzX3xexWx9vP8C/fpQazDcRIeS70wpvq5pwB3SYxiv/wWyxO1bnpN4q6rlKNzhe
|
5
|
+
h4nTka9m/OnnOCNoI4np95MIJmHNJ+6cY0XhHiqqaGdcrQdz4w5QMCXIQk7Oovm5
|
6
|
+
kCecasg5/jh02brQlQhPQ8AS04Xxq9o/nO6aONhLnLktRjBGx1mxHEgq7oUGOdYk
|
7
|
+
foXOeE0XPxkG8H1cnzgTCffLOUwEgIdEn8Ng5QIDAQABAoIBAQCVIe/3SgddaUR7
|
8
|
+
Me8M7lIQUhzI4+3N3sxd3YzGAF7/7Uy0Ag3VQ7C0Y1K3LpAyo2HiCZCq7W0YDm+A
|
9
|
+
vU0DJ8Z5EXmaHYlyFMVfbvb2oMl07AEZ3dxNw8VBEIgmXxY4HSV7VWxX+8E1hSTK
|
10
|
+
6NKVWjVS98c9zbn7WmjpsX7q1zOKkE7B2uMLZr0Q+5eDRTgNYZdRSKWt5g9KXJrW
|
11
|
+
F4ONPSnvEsSWKDylS89JK1jK1Q3neiTHmqpu112m8x5JsQ3OrFNfWmwRxiGbgSXv
|
12
|
+
WQnbU+IJ/23f8i/6gwHnYjHpldsxQQFPsrODPQS6vj0OV+ectcp7QneTMF1f4NKW
|
13
|
+
QmJTI2KBAoGBAPB8qezibK9OxqLrrLFtqQE1v7m592A59BcujxWJ8nTzRGyLygeG
|
14
|
+
rCX/PUv8iSd0BTIFuCSlgy6yqxT8Wko+vzWLtu4rP1Iky9L+12UuJJiK5mA6BC9f
|
15
|
+
DMLqNEOR0jO9Y490hYDejH+e0cAY2s0Oh8TUjEP7D/ViFkWSLE5a3kcFAoGBAOd0
|
16
|
+
sOq4kFVk/ZiALN/wkaU73qPEpVM8M0W7NwZ6MOXdVvMNLu3An2cf/i2/C6wqG/Ve
|
17
|
+
NYCQrCMOBRfEbWDF4KOb/YuOpAgVfZnujOas1TfVsyM06wnkjCvg0DL9qwihMR9K
|
18
|
+
SK0c/sIl4ybUNJzwhmx2kPrt8Vk9+gqirGYA+hhhAoGAZe1glC9Pw2nPFQRwmG8T
|
19
|
+
H5kpXs2sRJOrmhu4t3dVVS46RQtmoJP66MvqrgcmFpu9C/uSla21ERjXHDjtB+Ta
|
20
|
+
ZBaIfR/FYcqIvTAYGSFaj3Dnvcc5ON6/aOmdJzpp7lYKGaZYY0twHzMwUYv3SMws
|
21
|
+
zUcNAE8r72QYbnpK3xbyeQUCgYBSPuz++0aOkaxrnGBV0y5uALBEkYQN575wcO5E
|
22
|
+
pvbpN5XGGFEsut3pzzyLFPAY5X252xg37zC75Cd7IpmbYbVJbgzSooU3Oiu/nz0C
|
23
|
+
WzgI9y8Iu60pfsUwclqJRAqarmy+Ka9ZlIwSgVQOYCmx+uZJdHhgMl0o0RUg4l1Q
|
24
|
+
gdhdAQKBgG3U5J6jeHe8svMWO8R3pfFewX427FETnwm5XU/DCeY1xAAEVlsXLgDe
|
25
|
+
3XmaQlskylQJhoP0pImV+snAFTtPYGZM9Wof18FkYxwaCViEwYVr7Z5Gm6GyFKpL
|
26
|
+
IiVG3k0XwY/Pgci3Wxw5aZIyS4NBnp8KCXzXAn4nfUbFZt/DXzI6
|
27
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_575136947e054f114761c6df08bd3644f0c2079aae" Version="2.0" IssueInstant="2013-04-12T00:45:07Z" Destination="http://localhost:3000/saml-login" InResponseTo="49246bce-6fc4-43b7-a661-6d5d5b146ea4"><saml:Issuer>http://localhost/simplesaml/saml2/idp/metadata.php</saml:Issuer><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
|
2
|
+
<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
3
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
4
|
+
<ds:Reference URI="#_575136947e054f114761c6df08bd3644f0c2079aae"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>Vb69+UWPYwvAMb4K5aVQvT7Nq2c=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>eMsQ2jp2aY0kqYYDPS0rUJkwNPajXYFjBArqS8n4JuRhjNTpv3mDVmfk/+eUDxHBWfxSFDa5gLN3lgtu6VMwfcJ2zuUmIFtUUpfBcCaeVcc4jDehckSAAYXIlrG3eoPDp3+uU6cS+3gJQPfCfMl7LIKeNZS1yOHgz5XXk9zOo9Y=</ds:SignatureValue>
|
5
|
+
<ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIICgTCCAeoCCQCbOlrWDdX7FTANBgkqhkiG9w0BAQUFADCBhDELMAkGA1UEBhMCTk8xGDAWBgNVBAgTD0FuZHJlYXMgU29sYmVyZzEMMAoGA1UEBxMDRm9vMRAwDgYDVQQKEwdVTklORVRUMRgwFgYDVQQDEw9mZWlkZS5lcmxhbmcubm8xITAfBgkqhkiG9w0BCQEWEmFuZHJlYXNAdW5pbmV0dC5ubzAeFw0wNzA2MTUxMjAxMzVaFw0wNzA4MTQxMjAxMzVaMIGEMQswCQYDVQQGEwJOTzEYMBYGA1UECBMPQW5kcmVhcyBTb2xiZXJnMQwwCgYDVQQHEwNGb28xEDAOBgNVBAoTB1VOSU5FVFQxGDAWBgNVBAMTD2ZlaWRlLmVybGFuZy5ubzEhMB8GCSqGSIb3DQEJARYSYW5kcmVhc0B1bmluZXR0Lm5vMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDivbhR7P516x/S3BqKxupQe0LONoliupiBOesCO3SHbDrl3+q9IbfnfmE04rNuMcPsIxB161TdDpIesLCn7c8aPHISKOtPlAeTZSnb8QAu7aRjZq3+PbrP5uW3TcfCGPtKTytHOge/OlJbo078dVhXQ14d1EDwXJW1rRXuUt4C8QIDAQABMA0GCSqGSIb3DQEBBQUAA4GBACDVfp86HObqY+e8BUoWQ9+VMQx1ASDohBjwOsg2WykUqRXF+dLfcUH9dWR63CtZIKFDbStNomPnQz7nbK+onygwBspVEbnHuUihZq3ZUdmumQqCw4Uvs/1Uvq3orOo/WJVhTyvLgFVK2QarQ4/67OZfHd7R+POBXhophSMv1ZOo</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature><samlp:Status><samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></samlp:Status><saml:Assertion xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" ID="_36bb41924d265fa2d92450e85c53c35590bf06c106" Version="2.0" IssueInstant="2013-04-12T00:45:07Z"><saml:Issuer>http://localhost/simplesaml/saml2/idp/metadata.php</saml:Issuer><ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
|
6
|
+
<ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
7
|
+
<ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
|
8
|
+
<ds:Reference URI="#_36bb41924d265fa2d92450e85c53c35590bf06c106"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/><ds:DigestValue>NRT1gWsxJE1n+kHlHRbEvfQW81I=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>S1eVfcB7Lf0hNdfunOIDivgWL5JPBsEiUgXnNhgx4rbID1WnQv1X3QOt25OWO1RaML9ML61A976AS6CP1s5Z4y2SzHcPDbye3vKll3lbqKj6OQ4H5s1C9Xmy3sJcOIw8aJ+N89KhLckWqy66ec/XybbX3D2RDuzoIg2KmR2Nf14=</ds:SignatureValue>
|
9
|
+
<ds:KeyInfo><ds:X509Data><ds:X509Certificate>MIICgTCCAeoCCQCbOlrWDdX7FTANBgkqhkiG9w0BAQUFADCBhDELMAkGA1UEBhMCTk8xGDAWBgNVBAgTD0FuZHJlYXMgU29sYmVyZzEMMAoGA1UEBxMDRm9vMRAwDgYDVQQKEwdVTklORVRUMRgwFgYDVQQDEw9mZWlkZS5lcmxhbmcubm8xITAfBgkqhkiG9w0BCQEWEmFuZHJlYXNAdW5pbmV0dC5ubzAeFw0wNzA2MTUxMjAxMzVaFw0wNzA4MTQxMjAxMzVaMIGEMQswCQYDVQQGEwJOTzEYMBYGA1UECBMPQW5kcmVhcyBTb2xiZXJnMQwwCgYDVQQHEwNGb28xEDAOBgNVBAoTB1VOSU5FVFQxGDAWBgNVBAMTD2ZlaWRlLmVybGFuZy5ubzEhMB8GCSqGSIb3DQEJARYSYW5kcmVhc0B1bmluZXR0Lm5vMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDivbhR7P516x/S3BqKxupQe0LONoliupiBOesCO3SHbDrl3+q9IbfnfmE04rNuMcPsIxB161TdDpIesLCn7c8aPHISKOtPlAeTZSnb8QAu7aRjZq3+PbrP5uW3TcfCGPtKTytHOge/OlJbo078dVhXQ14d1EDwXJW1rRXuUt4C8QIDAQABMA0GCSqGSIb3DQEBBQUAA4GBACDVfp86HObqY+e8BUoWQ9+VMQx1ASDohBjwOsg2WykUqRXF+dLfcUH9dWR63CtZIKFDbStNomPnQz7nbK+onygwBspVEbnHuUihZq3ZUdmumQqCw4Uvs/1Uvq3orOo/WJVhTyvLgFVK2QarQ4/67OZfHd7R+POBXhophSMv1ZOo</ds:X509Certificate></ds:X509Data></ds:KeyInfo></ds:Signature><saml:Subject><saml:NameID SPNameQualifier="http://localhost:3000/" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient">_7e3d918ee67356d13c10e088927902206b98c1c2bb</saml:NameID><saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"><saml:SubjectConfirmationData NotOnOrAfter="2013-04-12T00:50:07Z" Recipient="http://localhost:3000/saml-login" InResponseTo="49246bce-6fc4-43b7-a661-6d5d5b146ea4"/></saml:SubjectConfirmation></saml:Subject><saml:Conditions NotBefore="2013-04-12T00:44:37Z" NotOnOrAfter="2013-04-12T00:50:07Z"><saml:AudienceRestriction><saml:Audience>http://localhost:3000/</saml:Audience></saml:AudienceRestriction></saml:Conditions><saml:AuthnStatement AuthnInstant="2013-04-12T00:45:07Z" SessionNotOnOrAfter="2013-04-12T08:45:07Z" SessionIndex="_07a70ed54455feb8685d2b25e292773cd003cd57ac"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:Password</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement><saml:AttributeStatement><saml:Attribute Name="mail" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"><saml:AttributeValue xsi:type="xs:string">toddthomas@acm.org</saml:AttributeValue></saml:Attribute><saml:Attribute Name="givenname" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"><saml:AttributeValue xsi:type="xs:string">Todd</saml:AttributeValue></saml:Attribute><saml:Attribute Name="sn" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:basic"><saml:AttributeValue xsi:type="xs:string">Thomas</saml:AttributeValue></saml:Attribute></saml:AttributeStatement></saml:Assertion></samlp:Response>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<Response
|
2
|
+
IssueInstant="2003-04-17T00:46:02Z" Version="2.0"
|
3
|
+
ID="_c7055387-af61-4fce-8b98-e2927324b306"
|
4
|
+
xmlns="urn:oasis:names:tc:SAML:2.0:protocol"
|
5
|
+
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">
|
6
|
+
<saml:Issuer>https://www.opensaml.org/IDP"</saml:Issuer>
|
7
|
+
<Status>
|
8
|
+
<StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
|
9
|
+
</Status>
|
10
|
+
<Assertion ID="_a75adf55-01d7-40cc-929f-dbd8372ebdfc"
|
11
|
+
IssueInstant="2003-04-17T00:46:02Z" Version="2.0"
|
12
|
+
xmlns="urn:oasis:names:tc:SAML:2.0:assertion">
|
13
|
+
<Issuer>https://www.opensaml.org/IDP</Issuer>
|
14
|
+
<Subject>
|
15
|
+
<NameID
|
16
|
+
Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress">
|
17
|
+
scott@example.org
|
18
|
+
</NameID>
|
19
|
+
<SubjectConfirmation
|
20
|
+
Method="urn:oasis:names:tc:SAML:2.0:cm:bearer"/>
|
21
|
+
</Subject>
|
22
|
+
<Conditions NotBefore="2003-04-17T00:46:02Z"
|
23
|
+
NotOnOrAfter="2003-04-17T00:51:02Z">
|
24
|
+
<AudienceRestriction>
|
25
|
+
<Audience>http://www.opensaml.org/SP</Audience>
|
26
|
+
</AudienceRestriction>
|
27
|
+
</Conditions>
|
28
|
+
<AuthnStatement AuthnInstant="2003-04-17T00:46:00Z">
|
29
|
+
<AuthnContext>
|
30
|
+
<AuthnContextClassRef>
|
31
|
+
urn:oasis:names:tc:SAML:2.0:ac:classes:Password
|
32
|
+
</AuthnContextClassRef>
|
33
|
+
</AuthnContext>
|
34
|
+
</AuthnStatement>
|
35
|
+
</Assertion>
|
36
|
+
</Response>
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SignedXml::Document do
|
4
|
+
include SignedXml::DigestMethodResolution
|
5
|
+
|
6
|
+
let(:resources_path) { File.join(File.dirname(__FILE__), 'resources') }
|
7
|
+
|
8
|
+
let(:unsigned_doc_nodes) do
|
9
|
+
xml_doc_from_file(File.join(resources_path, 'unsigned_saml_response.xml'))
|
10
|
+
end
|
11
|
+
|
12
|
+
let(:unsigned_doc) { SignedXml::Document.new(unsigned_doc_nodes) }
|
13
|
+
|
14
|
+
let(:signed_doc_nodes) do
|
15
|
+
xml_doc_from_file(File.join(resources_path, 'signed_saml_response.xml'))
|
16
|
+
end
|
17
|
+
|
18
|
+
let(:signed_doc) { SignedXml::Document.new(signed_doc_nodes) }
|
19
|
+
|
20
|
+
it "knows which documents can be verified" do
|
21
|
+
unsigned_doc.is_verifiable?.should be false
|
22
|
+
signed_doc.is_verifiable?.should be true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "knows unsigned documents can't be verified" do
|
26
|
+
unsigned_doc.is_verified?.should be false
|
27
|
+
end
|
28
|
+
|
29
|
+
let(:test_certificate) { OpenSSL::X509::Certificate.new IO.read(File.join(resources_path, 'test_cert.pem')) }
|
30
|
+
|
31
|
+
it "can read an embedded X.509 certificate" do
|
32
|
+
signed_doc.send(:signatures).first.send(:x509_certificate).to_pem.should eq test_certificate.to_pem
|
33
|
+
end
|
34
|
+
|
35
|
+
it "knows the public key of the embedded X.509 certificate" do
|
36
|
+
signed_doc.send(:signatures).first.send(:public_key).to_s.should eq test_certificate.public_key.to_s
|
37
|
+
end
|
38
|
+
|
39
|
+
it "knows the signature method of the signed info" do
|
40
|
+
digester_for_id(signed_doc.send(:signatures).first.send(:signed_info).signature_method).class.should == OpenSSL::Digest::SHA1
|
41
|
+
end
|
42
|
+
|
43
|
+
it "knows how to canonicalize its signed info" do
|
44
|
+
signed_doc.send(:signatures).first.send(:signed_info).transforms.first.method.should == Nokogiri::XML::XML_C14N_EXCLUSIVE_1_0
|
45
|
+
end
|
46
|
+
|
47
|
+
it "verifies its signed info" do
|
48
|
+
signed_doc.send(:signatures).first.send(:is_signed_info_verified?).should be true
|
49
|
+
end
|
50
|
+
|
51
|
+
it "verifies docs with one enveloped-signature Resource element and embedded X.509 key" do
|
52
|
+
signed_doc.is_verified?.should be true
|
53
|
+
end
|
54
|
+
|
55
|
+
let(:same_doc_ref_nodes) do
|
56
|
+
xml_doc_from_file(File.join(resources_path, 'same_doc_reference.xml'))
|
57
|
+
end
|
58
|
+
|
59
|
+
let(:same_doc_ref_doc) { SignedXml::Document.new(same_doc_ref_nodes) }
|
60
|
+
|
61
|
+
it "verifies docs with same-document references" do
|
62
|
+
same_doc_ref_doc.is_verified?.should be true
|
63
|
+
end
|
64
|
+
|
65
|
+
let(:two_sig_nodes) do
|
66
|
+
xml_doc_from_file(File.join(resources_path, 'two_sig_doc.xml'))
|
67
|
+
end
|
68
|
+
|
69
|
+
let(:two_sig_doc) { SignedXml::Document.new(two_sig_nodes) }
|
70
|
+
|
71
|
+
it "verifies docs with more than one signature" do
|
72
|
+
two_sig_doc.is_verified?.should be true
|
73
|
+
end
|
74
|
+
|
75
|
+
let(:badly_signed_doc_nodes) do
|
76
|
+
xml_doc_from_file(File.join(resources_path, 'badly_signed_saml_response.xml'))
|
77
|
+
end
|
78
|
+
|
79
|
+
let(:badly_signed_doc) { SignedXml::Document.new(badly_signed_doc_nodes) }
|
80
|
+
|
81
|
+
it "fails verification of a badly-signed doc" do
|
82
|
+
badly_signed_doc.is_verified?.should be false
|
83
|
+
end
|
84
|
+
|
85
|
+
let(:incorrect_digest_doc_nodes) do
|
86
|
+
xml_doc_from_file(File.join(resources_path, 'incorrect_digest_saml_response.xml'))
|
87
|
+
end
|
88
|
+
|
89
|
+
let(:incorrect_digest_doc) { SignedXml::Document.new(incorrect_digest_doc_nodes) }
|
90
|
+
|
91
|
+
it "fails verification of a doc with an incorrect Resource digest" do
|
92
|
+
incorrect_digest_doc.is_verified?.should be false
|
93
|
+
end
|
94
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,157 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: signed_xml
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Todd Thomas
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-04-12 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: nokogiri
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.5'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.5'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: options
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :runtime
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: rspec
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: XML Signature verification
|
79
|
+
email:
|
80
|
+
- todd.thomas@openlogic.com
|
81
|
+
executables: []
|
82
|
+
extensions: []
|
83
|
+
extra_rdoc_files: []
|
84
|
+
files:
|
85
|
+
- .gitignore
|
86
|
+
- Gemfile
|
87
|
+
- LICENSE.txt
|
88
|
+
- README.md
|
89
|
+
- Rakefile
|
90
|
+
- lib/signed_xml.rb
|
91
|
+
- lib/signed_xml/base64_transform.rb
|
92
|
+
- lib/signed_xml/c14n_transform.rb
|
93
|
+
- lib/signed_xml/digest_method_resolution.rb
|
94
|
+
- lib/signed_xml/digest_transform.rb
|
95
|
+
- lib/signed_xml/document.rb
|
96
|
+
- lib/signed_xml/enveloped_signature_transform.rb
|
97
|
+
- lib/signed_xml/reference.rb
|
98
|
+
- lib/signed_xml/signature.rb
|
99
|
+
- lib/signed_xml/signed_info.rb
|
100
|
+
- lib/signed_xml/transformable.rb
|
101
|
+
- lib/signed_xml/version.rb
|
102
|
+
- signed_xml.gemspec
|
103
|
+
- spec/resources/badly_signed_saml_response.xml
|
104
|
+
- spec/resources/incorrect_digest_saml_response.xml
|
105
|
+
- spec/resources/same_doc_reference.xml
|
106
|
+
- spec/resources/same_doc_reference_template.xml
|
107
|
+
- spec/resources/saml_response_template.xml
|
108
|
+
- spec/resources/signed_saml_response.xml
|
109
|
+
- spec/resources/test_cert.pem
|
110
|
+
- spec/resources/test_key.pem
|
111
|
+
- spec/resources/two_sig_doc.xml
|
112
|
+
- spec/resources/unsigned_saml_response.xml
|
113
|
+
- spec/signed_xml_document_spec.rb
|
114
|
+
- spec/spec_helper.rb
|
115
|
+
homepage: ''
|
116
|
+
licenses: []
|
117
|
+
post_install_message:
|
118
|
+
rdoc_options: []
|
119
|
+
require_paths:
|
120
|
+
- lib
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
none: false
|
123
|
+
requirements:
|
124
|
+
- - ! '>='
|
125
|
+
- !ruby/object:Gem::Version
|
126
|
+
version: '0'
|
127
|
+
segments:
|
128
|
+
- 0
|
129
|
+
hash: -2293715516306633631
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
131
|
+
none: false
|
132
|
+
requirements:
|
133
|
+
- - ! '>='
|
134
|
+
- !ruby/object:Gem::Version
|
135
|
+
version: '0'
|
136
|
+
segments:
|
137
|
+
- 0
|
138
|
+
hash: -2293715516306633631
|
139
|
+
requirements: []
|
140
|
+
rubyforge_project:
|
141
|
+
rubygems_version: 1.8.25
|
142
|
+
signing_key:
|
143
|
+
specification_version: 3
|
144
|
+
summary: Provides [incomplete] support for verification of XML Signatures <http://www.w3.org/TR/xmldsig-core>.
|
145
|
+
test_files:
|
146
|
+
- spec/resources/badly_signed_saml_response.xml
|
147
|
+
- spec/resources/incorrect_digest_saml_response.xml
|
148
|
+
- spec/resources/same_doc_reference.xml
|
149
|
+
- spec/resources/same_doc_reference_template.xml
|
150
|
+
- spec/resources/saml_response_template.xml
|
151
|
+
- spec/resources/signed_saml_response.xml
|
152
|
+
- spec/resources/test_cert.pem
|
153
|
+
- spec/resources/test_key.pem
|
154
|
+
- spec/resources/two_sig_doc.xml
|
155
|
+
- spec/resources/unsigned_saml_response.xml
|
156
|
+
- spec/signed_xml_document_spec.rb
|
157
|
+
- spec/spec_helper.rb
|