saml_idp 0.9.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +54 -49
- data/lib/saml_idp/assertion_builder.rb +28 -3
- data/lib/saml_idp/configurator.rb +8 -3
- data/lib/saml_idp/controller.rb +27 -18
- data/lib/saml_idp/encryptor.rb +0 -1
- data/lib/saml_idp/fingerprint.rb +19 -0
- data/lib/saml_idp/incoming_metadata.rb +22 -0
- data/lib/saml_idp/metadata_builder.rb +25 -9
- data/lib/saml_idp/persisted_metadata.rb +4 -0
- data/lib/saml_idp/request.rb +90 -13
- data/lib/saml_idp/response_builder.rb +26 -6
- data/lib/saml_idp/saml_response.rb +62 -28
- data/lib/saml_idp/service_provider.rb +2 -6
- data/lib/saml_idp/signable.rb +1 -2
- data/lib/saml_idp/signature_builder.rb +2 -1
- data/lib/saml_idp/signed_info_builder.rb +2 -2
- data/lib/saml_idp/version.rb +1 -1
- data/lib/saml_idp/xml_security.rb +19 -14
- data/lib/saml_idp.rb +4 -3
- data/saml_idp.gemspec +32 -31
- data/spec/lib/saml_idp/assertion_builder_spec.rb +143 -0
- data/spec/lib/saml_idp/configurator_spec.rb +40 -2
- data/spec/lib/saml_idp/controller_spec.rb +66 -8
- data/spec/lib/saml_idp/fingerprint_spec.rb +14 -0
- data/spec/lib/saml_idp/incoming_metadata_spec.rb +89 -1
- data/spec/lib/saml_idp/metadata_builder_spec.rb +24 -1
- data/spec/lib/saml_idp/request_spec.rb +153 -64
- data/spec/lib/saml_idp/response_builder_spec.rb +3 -1
- data/spec/lib/saml_idp/saml_response_spec.rb +141 -7
- data/spec/rails_app/app/controllers/saml_controller.rb +1 -5
- data/spec/rails_app/app/controllers/saml_idp_controller.rb +55 -3
- data/{app → spec/rails_app/app}/views/saml_idp/idp/new.html.erb +3 -4
- data/{app → spec/rails_app/app}/views/saml_idp/idp/saml_post.html.erb +1 -1
- data/spec/rails_app/config/application.rb +1 -0
- data/spec/rails_app/config/boot.rb +1 -1
- data/spec/rails_app/config/environments/development.rb +2 -0
- data/spec/spec_helper.rb +20 -1
- data/spec/support/certificates/sp_cert_req.csr +12 -0
- data/spec/support/certificates/sp_private_key.pem +16 -0
- data/spec/support/certificates/sp_x509_cert.crt +18 -0
- data/spec/support/saml_request_macros.rb +105 -4
- data/spec/support/security_helpers.rb +12 -2
- data/spec/xml_security_spec.rb +11 -7
- metadata +96 -62
- data/app/controllers/saml_idp/idp_controller.rb +0 -59
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIC2DCCAkGgAwIBAgIBADANBgkqhkiG9w0BAQ0FADCBiDELMAkGA1UEBhMCanAx
|
|
3
|
+
DjAMBgNVBAgMBVRva3lvMQswCQYDVQQKDAJHUzEgMB4GA1UEAwwXaHR0cHM6Ly9m
|
|
4
|
+
b28uZXhhbXBsZS5jb20xDDAKBgNVBAcMA0ZvbzEMMAoGA1UECwwDQm9vMR4wHAYJ
|
|
5
|
+
KoZIhvcNAQkBFg9mb29AZXhhbXBsZS5jb20wHhcNMjAwMTIzMDYyMzI5WhcNNDcw
|
|
6
|
+
NjA5MDYyMzI5WjCBiDELMAkGA1UEBhMCanAxDjAMBgNVBAgMBVRva3lvMQswCQYD
|
|
7
|
+
VQQKDAJHUzEgMB4GA1UEAwwXaHR0cHM6Ly9mb28uZXhhbXBsZS5jb20xDDAKBgNV
|
|
8
|
+
BAcMA0ZvbzEMMAoGA1UECwwDQm9vMR4wHAYJKoZIhvcNAQkBFg9mb29AZXhhbXBs
|
|
9
|
+
ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALwNWPaZUtBXsCNP5ycu
|
|
10
|
+
/eQOdAW8CjdF1R4YaGmWxgVpxgHLM1EP+N6C67VqGu/OcPJk3ynfIHs49ua3SvRo
|
|
11
|
+
av7JjM+HpuuCR/m7oUy1ZOP3i8tC5P+7JAa7N0GSItvmYBZEy2bjegdcMrS/bkm2
|
|
12
|
+
wbU8mee2Rd8EOkU/V5Ys76NnAgMBAAGjUDBOMB0GA1UdDgQWBBQMtOtrh2VS/mh4
|
|
13
|
+
awGbKA37vVnw+zAfBgNVHSMEGDAWgBQMtOtrh2VS/mh4awGbKA37vVnw+zAMBgNV
|
|
14
|
+
HRMEBTADAQH/MA0GCSqGSIb3DQEBDQUAA4GBAHjTTm4Hyx1rfzygknc6q1dYwpEv
|
|
15
|
+
/3AsPiTnF4AfH/5kGIIXNzwg0ADsziFMJYRRR9eMu97CHQbr8gHt99P8uaen6cmJ
|
|
16
|
+
4VCwJLP2N8gZrycssimA3M83DWRRVZbxZhpuUWNajtYIxwyUbB7eRSJgz3Tc0opF
|
|
17
|
+
933YwucWuFzKSqn3
|
|
18
|
+
-----END CERTIFICATE-----
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
require 'saml_idp/logout_request_builder'
|
|
2
2
|
|
|
3
3
|
module SamlRequestMacros
|
|
4
|
-
def make_saml_request(requested_saml_acs_url = "https://foo.example.com/saml/consume")
|
|
4
|
+
def make_saml_request(requested_saml_acs_url = "https://foo.example.com/saml/consume", enable_secure_options = false)
|
|
5
5
|
auth_request = OneLogin::RubySaml::Authrequest.new
|
|
6
|
-
auth_url = auth_request.
|
|
7
|
-
|
|
6
|
+
auth_url = auth_request.create_params(saml_settings(requested_saml_acs_url, enable_secure_options))
|
|
7
|
+
auth_url['SAMLRequest']
|
|
8
8
|
end
|
|
9
9
|
|
|
10
10
|
def make_saml_logout_request(requested_saml_logout_url = 'https://foo.example.com/saml/logout')
|
|
@@ -18,21 +18,122 @@ module SamlRequestMacros
|
|
|
18
18
|
Base64.strict_encode64(request_builder.signed)
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
def
|
|
21
|
+
def make_saml_sp_slo_request(param_type: true, security_options: {})
|
|
22
|
+
logout_request = OneLogin::RubySaml::Logoutrequest.new
|
|
23
|
+
saml_sp_setting = saml_settings("https://foo.example.com/saml/consume", true, security_options: security_options)
|
|
24
|
+
if param_type
|
|
25
|
+
logout_request.create_params(saml_sp_setting, 'RelayState' => 'https://foo.example.com/home')
|
|
26
|
+
else
|
|
27
|
+
logout_request.create(saml_sp_setting, 'RelayState' => 'https://foo.example.com/home')
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def generate_sp_metadata(saml_acs_url = "https://foo.example.com/saml/consume", enable_secure_options = false)
|
|
32
|
+
sp_metadata = OneLogin::RubySaml::Metadata.new
|
|
33
|
+
sp_metadata.generate(saml_settings(saml_acs_url, enable_secure_options), true)
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def saml_settings(saml_acs_url = "https://foo.example.com/saml/consume", enable_secure_options = false, security_options: {})
|
|
22
37
|
settings = OneLogin::RubySaml::Settings.new
|
|
23
38
|
settings.assertion_consumer_service_url = saml_acs_url
|
|
24
39
|
settings.issuer = "http://example.com/issuer"
|
|
25
40
|
settings.idp_sso_target_url = "http://idp.com/saml/idp"
|
|
41
|
+
settings.idp_slo_target_url = "http://idp.com/saml/slo"
|
|
26
42
|
settings.assertion_consumer_logout_service_url = 'https://foo.example.com/saml/logout'
|
|
27
43
|
settings.idp_cert_fingerprint = SamlIdp::Default::FINGERPRINT
|
|
28
44
|
settings.name_identifier_format = SamlIdp::Default::NAME_ID_FORMAT
|
|
45
|
+
add_securty_options(settings, default_sp_security_options.merge!(security_options)) if enable_secure_options
|
|
29
46
|
settings
|
|
30
47
|
end
|
|
31
48
|
|
|
49
|
+
def add_securty_options(settings, options = default_sp_security_options)
|
|
50
|
+
# Security section
|
|
51
|
+
settings.idp_cert = SamlIdp::Default::X509_CERTIFICATE
|
|
52
|
+
# Signed embedded singature
|
|
53
|
+
settings.security[:authn_requests_signed] = options[:authn_requests_signed]
|
|
54
|
+
settings.security[:embed_sign] = options[:embed_sign]
|
|
55
|
+
settings.security[:logout_requests_signed] = options[:logout_requests_signed]
|
|
56
|
+
settings.security[:logout_responses_signed] = options[:logout_responses_signed]
|
|
57
|
+
settings.security[:metadata_signed] = options[:digest_method]
|
|
58
|
+
settings.security[:digest_method] = options[:digest_method]
|
|
59
|
+
settings.security[:signature_method] = options[:signature_method]
|
|
60
|
+
settings.security[:want_assertions_signed] = options[:assertions_signed]
|
|
61
|
+
settings.private_key = sp_pv_key
|
|
62
|
+
settings.certificate = sp_x509_cert
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def idp_configure(saml_acs_url = "https://foo.example.com/saml/consume", enable_secure_options = false)
|
|
66
|
+
SamlIdp.configure do |config|
|
|
67
|
+
config.x509_certificate = SamlIdp::Default::X509_CERTIFICATE
|
|
68
|
+
config.secret_key = SamlIdp::Default::SECRET_KEY
|
|
69
|
+
config.password = nil
|
|
70
|
+
config.algorithm = :sha256
|
|
71
|
+
config.organization_name = 'idp.com'
|
|
72
|
+
config.organization_url = 'http://idp.com'
|
|
73
|
+
config.base_saml_location = 'http://idp.com/saml/idp'
|
|
74
|
+
config.single_logout_service_post_location = 'http://idp.com/saml/idp/logout'
|
|
75
|
+
config.single_logout_service_redirect_location = 'http://idp.com/saml/idp/logout'
|
|
76
|
+
config.attribute_service_location = 'http://idp.com/saml/idp/attribute'
|
|
77
|
+
config.single_service_post_location = 'http://idp.com/saml/idp/sso'
|
|
78
|
+
config.name_id.formats = SamlIdp::Default::NAME_ID_FORMAT
|
|
79
|
+
config.service_provider.metadata_persister = lambda { |_identifier, _service_provider|
|
|
80
|
+
raw_metadata = generate_sp_metadata(saml_acs_url, enable_secure_options)
|
|
81
|
+
SamlIdp::IncomingMetadata.new(raw_metadata).to_h
|
|
82
|
+
}
|
|
83
|
+
config.service_provider.persisted_metadata_getter = lambda { |_identifier, _settings|
|
|
84
|
+
raw_metadata = generate_sp_metadata(saml_acs_url, enable_secure_options)
|
|
85
|
+
SamlIdp::IncomingMetadata.new(raw_metadata).to_h
|
|
86
|
+
}
|
|
87
|
+
config.service_provider.finder = lambda { |_issuer_or_entity_id|
|
|
88
|
+
{
|
|
89
|
+
response_hosts: [URI(saml_acs_url).host],
|
|
90
|
+
acs_url: saml_acs_url,
|
|
91
|
+
cert: sp_x509_cert,
|
|
92
|
+
fingerprint: SamlIdp::Fingerprint.certificate_digest(sp_x509_cert),
|
|
93
|
+
assertion_consumer_logout_service_url: 'https://foo.example.com/saml/logout'
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def decode_saml_request(saml_request)
|
|
100
|
+
decoded_request = Base64.decode64(saml_request)
|
|
101
|
+
begin
|
|
102
|
+
# Try to decompress, since SAMLRequest might be compressed
|
|
103
|
+
Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(decoded_request)
|
|
104
|
+
rescue Zlib::DataError
|
|
105
|
+
# If it's not compressed, just return the decoded request
|
|
106
|
+
decoded_request
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
32
110
|
def print_pretty_xml(xml_string)
|
|
33
111
|
doc = REXML::Document.new xml_string
|
|
34
112
|
outbuf = ""
|
|
35
113
|
doc.write(outbuf, 1)
|
|
36
114
|
puts outbuf
|
|
37
115
|
end
|
|
116
|
+
|
|
117
|
+
def decode_saml_request(saml_request)
|
|
118
|
+
decoded_request = Base64.decode64(saml_request)
|
|
119
|
+
begin
|
|
120
|
+
# Try to decompress, since SAMLRequest might be compressed
|
|
121
|
+
Zlib::Inflate.new(-Zlib::MAX_WBITS).inflate(decoded_request)
|
|
122
|
+
rescue Zlib::DataError
|
|
123
|
+
# If it's not compressed, just return the decoded request
|
|
124
|
+
decoded_request
|
|
125
|
+
end
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
def default_sp_security_options
|
|
129
|
+
{
|
|
130
|
+
authn_requests_signed: true,
|
|
131
|
+
embed_sign: true,
|
|
132
|
+
logout_requests_signed: true,
|
|
133
|
+
logout_responses_signed: true,
|
|
134
|
+
digest_method: XMLSecurity::Document::SHA256,
|
|
135
|
+
signature_method: XMLSecurity::Document::RSA_SHA256,
|
|
136
|
+
assertions_signed: true
|
|
137
|
+
}
|
|
138
|
+
end
|
|
38
139
|
end
|
|
@@ -51,11 +51,21 @@ module SecurityHelpers
|
|
|
51
51
|
@signature_fingerprint1 ||= "C5:19:85:D9:47:F1:BE:57:08:20:25:05:08:46:EB:27:F6:CA:B7:83"
|
|
52
52
|
end
|
|
53
53
|
|
|
54
|
-
def
|
|
55
|
-
@
|
|
54
|
+
def certificate_1
|
|
55
|
+
@certificate_1 ||= File.read(File.join(File.dirname(__FILE__), 'certificates', 'certificate1'))
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
def r1_signature_2
|
|
59
59
|
@signature2 ||= File.read(File.join(File.dirname(__FILE__), 'certificates', 'r1_certificate2_base64'))
|
|
60
60
|
end
|
|
61
|
+
|
|
62
|
+
# Generated by SAML tool https://www.samltool.com/self_signed_certs.php
|
|
63
|
+
def sp_pv_key
|
|
64
|
+
@sp_pv_key ||= File.read(File.join(File.dirname(__FILE__), 'certificates', 'sp_private_key.pem'))
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Generated by SAML tool https://www.samltool.com/self_signed_certs.php, expired date is 9999
|
|
68
|
+
def sp_x509_cert
|
|
69
|
+
@sp_x509_cert ||= File.read(File.join(File.dirname(__FILE__), 'certificates', 'sp_x509_cert.crt'))
|
|
70
|
+
end
|
|
61
71
|
end
|
data/spec/xml_security_spec.rb
CHANGED
|
@@ -19,7 +19,7 @@ module SamlIdp
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
it "it raise Fingerprint mismatch" do
|
|
22
|
-
expect { document.validate("no:fi:ng:er:pr:in:t", false) }.to(
|
|
22
|
+
expect { document.validate("", "no:fi:ng:er:pr:in:t", false) }.to(
|
|
23
23
|
raise_error(SamlIdp::XMLSecurity::SignedDocument::ValidationError, "Fingerprint mismatch")
|
|
24
24
|
)
|
|
25
25
|
end
|
|
@@ -45,10 +45,10 @@ module SamlIdp
|
|
|
45
45
|
response = Base64.decode64(response_document)
|
|
46
46
|
response.sub!(/<ds:X509Certificate>.*<\/ds:X509Certificate>/, "")
|
|
47
47
|
document = XMLSecurity::SignedDocument.new(response)
|
|
48
|
-
expect { document.validate("a fingerprint", false) }.to(
|
|
48
|
+
expect { document.validate("", "a fingerprint", false) }.to(
|
|
49
49
|
raise_error(
|
|
50
50
|
SamlIdp::XMLSecurity::SignedDocument::ValidationError,
|
|
51
|
-
"Certificate
|
|
51
|
+
"Certificate validation is required, but it doesn't exist."
|
|
52
52
|
)
|
|
53
53
|
)
|
|
54
54
|
end
|
|
@@ -57,22 +57,26 @@ module SamlIdp
|
|
|
57
57
|
describe "Algorithms" do
|
|
58
58
|
it "validate using SHA1" do
|
|
59
59
|
document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha1, false))
|
|
60
|
-
|
|
60
|
+
base64cert = document.elements["//ds:X509Certificate"].text
|
|
61
|
+
expect(document.validate(base64cert, "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")).to be_truthy
|
|
61
62
|
end
|
|
62
63
|
|
|
63
64
|
it "validate using SHA256" do
|
|
64
65
|
document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha256, false))
|
|
65
|
-
|
|
66
|
+
base64cert = document.elements["//ds:X509Certificate"].text
|
|
67
|
+
expect(document.validate(base64cert, "28:74:9B:E8:1F:E8:10:9C:A8:7C:A9:C3:E3:C5:01:6C:92:1C:B4:BA")).to be_truthy
|
|
66
68
|
end
|
|
67
69
|
|
|
68
70
|
it "validate using SHA384" do
|
|
69
71
|
document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha384, false))
|
|
70
|
-
|
|
72
|
+
base64cert = document.elements["//ds:X509Certificate"].text
|
|
73
|
+
expect(document.validate(base64cert, "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")).to be_truthy
|
|
71
74
|
end
|
|
72
75
|
|
|
73
76
|
it "validate using SHA512" do
|
|
74
77
|
document = XMLSecurity::SignedDocument.new(fixture(:adfs_response_sha512, false))
|
|
75
|
-
|
|
78
|
+
base64cert = document.elements["//ds:X509Certificate"].text
|
|
79
|
+
expect(document.validate(base64cert, "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72")).to be_truthy
|
|
76
80
|
end
|
|
77
81
|
end
|
|
78
82
|
|
metadata
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: saml_idp
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 1.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jon Phenow
|
|
8
|
-
autorequire:
|
|
9
8
|
bindir: bin
|
|
10
9
|
cert_chain: []
|
|
11
|
-
date:
|
|
10
|
+
date: 2025-10-09 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: activesupport
|
|
@@ -16,64 +15,64 @@ dependencies:
|
|
|
16
15
|
requirements:
|
|
17
16
|
- - ">="
|
|
18
17
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '
|
|
18
|
+
version: '5.2'
|
|
20
19
|
type: :runtime
|
|
21
20
|
prerelease: false
|
|
22
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
22
|
requirements:
|
|
24
23
|
- - ">="
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '
|
|
25
|
+
version: '5.2'
|
|
27
26
|
- !ruby/object:Gem::Dependency
|
|
28
|
-
name:
|
|
27
|
+
name: builder
|
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
|
30
29
|
requirements:
|
|
31
30
|
- - ">="
|
|
32
31
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: '
|
|
32
|
+
version: '3.0'
|
|
34
33
|
type: :runtime
|
|
35
34
|
prerelease: false
|
|
36
35
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
36
|
requirements:
|
|
38
37
|
- - ">="
|
|
39
38
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: '
|
|
39
|
+
version: '3.0'
|
|
41
40
|
- !ruby/object:Gem::Dependency
|
|
42
|
-
name:
|
|
41
|
+
name: nokogiri
|
|
43
42
|
requirement: !ruby/object:Gem::Requirement
|
|
44
43
|
requirements:
|
|
45
44
|
- - ">="
|
|
46
45
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
46
|
+
version: 1.6.2
|
|
48
47
|
type: :runtime
|
|
49
48
|
prerelease: false
|
|
50
49
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
50
|
requirements:
|
|
52
51
|
- - ">="
|
|
53
52
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
53
|
+
version: 1.6.2
|
|
55
54
|
- !ruby/object:Gem::Dependency
|
|
56
|
-
name:
|
|
55
|
+
name: ostruct
|
|
57
56
|
requirement: !ruby/object:Gem::Requirement
|
|
58
57
|
requirements:
|
|
59
58
|
- - ">="
|
|
60
59
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
60
|
+
version: '0'
|
|
62
61
|
type: :runtime
|
|
63
62
|
prerelease: false
|
|
64
63
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
64
|
requirements:
|
|
66
65
|
- - ">="
|
|
67
66
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
67
|
+
version: '0'
|
|
69
68
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
69
|
+
name: rexml
|
|
71
70
|
requirement: !ruby/object:Gem::Requirement
|
|
72
71
|
requirements:
|
|
73
72
|
- - ">="
|
|
74
73
|
- !ruby/object:Gem::Version
|
|
75
74
|
version: '0'
|
|
76
|
-
type: :
|
|
75
|
+
type: :runtime
|
|
77
76
|
prerelease: false
|
|
78
77
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
78
|
requirements:
|
|
@@ -81,119 +80,133 @@ dependencies:
|
|
|
81
80
|
- !ruby/object:Gem::Version
|
|
82
81
|
version: '0'
|
|
83
82
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
83
|
+
name: xmlenc
|
|
85
84
|
requirement: !ruby/object:Gem::Requirement
|
|
86
85
|
requirements:
|
|
87
86
|
- - ">="
|
|
88
87
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
90
|
-
type: :
|
|
88
|
+
version: 0.7.1
|
|
89
|
+
type: :runtime
|
|
91
90
|
prerelease: false
|
|
92
91
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
92
|
requirements:
|
|
94
93
|
- - ">="
|
|
95
94
|
- !ruby/object:Gem::Version
|
|
96
|
-
version:
|
|
95
|
+
version: 0.7.1
|
|
97
96
|
- !ruby/object:Gem::Dependency
|
|
98
|
-
name:
|
|
97
|
+
name: activeresource
|
|
98
|
+
requirement: !ruby/object:Gem::Requirement
|
|
99
|
+
requirements:
|
|
100
|
+
- - "~>"
|
|
101
|
+
- !ruby/object:Gem::Version
|
|
102
|
+
version: '6.1'
|
|
103
|
+
type: :development
|
|
104
|
+
prerelease: false
|
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
106
|
+
requirements:
|
|
107
|
+
- - "~>"
|
|
108
|
+
- !ruby/object:Gem::Version
|
|
109
|
+
version: '6.1'
|
|
110
|
+
- !ruby/object:Gem::Dependency
|
|
111
|
+
name: appraisal
|
|
99
112
|
requirement: !ruby/object:Gem::Requirement
|
|
100
113
|
requirements:
|
|
101
114
|
- - ">="
|
|
102
115
|
- !ruby/object:Gem::Version
|
|
103
|
-
version:
|
|
116
|
+
version: '0'
|
|
104
117
|
type: :development
|
|
105
118
|
prerelease: false
|
|
106
119
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
120
|
requirements:
|
|
108
121
|
- - ">="
|
|
109
122
|
- !ruby/object:Gem::Version
|
|
110
|
-
version:
|
|
123
|
+
version: '0'
|
|
111
124
|
- !ruby/object:Gem::Dependency
|
|
112
|
-
name:
|
|
125
|
+
name: capybara
|
|
113
126
|
requirement: !ruby/object:Gem::Requirement
|
|
114
127
|
requirements:
|
|
115
128
|
- - ">="
|
|
116
129
|
- !ruby/object:Gem::Version
|
|
117
|
-
version:
|
|
130
|
+
version: '2.16'
|
|
118
131
|
type: :development
|
|
119
132
|
prerelease: false
|
|
120
133
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
134
|
requirements:
|
|
122
135
|
- - ">="
|
|
123
136
|
- !ruby/object:Gem::Version
|
|
124
|
-
version:
|
|
137
|
+
version: '2.16'
|
|
125
138
|
- !ruby/object:Gem::Dependency
|
|
126
139
|
name: rails
|
|
127
140
|
requirement: !ruby/object:Gem::Requirement
|
|
128
141
|
requirements:
|
|
129
142
|
- - ">="
|
|
130
143
|
- !ruby/object:Gem::Version
|
|
131
|
-
version: '
|
|
144
|
+
version: '5.2'
|
|
132
145
|
type: :development
|
|
133
146
|
prerelease: false
|
|
134
147
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
148
|
requirements:
|
|
136
149
|
- - ">="
|
|
137
150
|
- !ruby/object:Gem::Version
|
|
138
|
-
version: '
|
|
151
|
+
version: '5.2'
|
|
139
152
|
- !ruby/object:Gem::Dependency
|
|
140
|
-
name:
|
|
153
|
+
name: debug
|
|
141
154
|
requirement: !ruby/object:Gem::Requirement
|
|
142
155
|
requirements:
|
|
143
156
|
- - ">="
|
|
144
157
|
- !ruby/object:Gem::Version
|
|
145
|
-
version: '
|
|
158
|
+
version: '0'
|
|
146
159
|
type: :development
|
|
147
160
|
prerelease: false
|
|
148
161
|
version_requirements: !ruby/object:Gem::Requirement
|
|
149
162
|
requirements:
|
|
150
163
|
- - ">="
|
|
151
164
|
- !ruby/object:Gem::Version
|
|
152
|
-
version: '
|
|
165
|
+
version: '0'
|
|
153
166
|
- !ruby/object:Gem::Dependency
|
|
154
|
-
name:
|
|
167
|
+
name: rake
|
|
155
168
|
requirement: !ruby/object:Gem::Requirement
|
|
156
169
|
requirements:
|
|
157
170
|
- - ">="
|
|
158
171
|
- !ruby/object:Gem::Version
|
|
159
|
-
version: '
|
|
172
|
+
version: '0'
|
|
160
173
|
type: :development
|
|
161
174
|
prerelease: false
|
|
162
175
|
version_requirements: !ruby/object:Gem::Requirement
|
|
163
176
|
requirements:
|
|
164
177
|
- - ">="
|
|
165
178
|
- !ruby/object:Gem::Version
|
|
166
|
-
version: '
|
|
179
|
+
version: '0'
|
|
167
180
|
- !ruby/object:Gem::Dependency
|
|
168
|
-
name:
|
|
181
|
+
name: rspec
|
|
169
182
|
requirement: !ruby/object:Gem::Requirement
|
|
170
183
|
requirements:
|
|
171
184
|
- - ">="
|
|
172
185
|
- !ruby/object:Gem::Version
|
|
173
|
-
version:
|
|
186
|
+
version: 3.7.0
|
|
174
187
|
type: :development
|
|
175
188
|
prerelease: false
|
|
176
189
|
version_requirements: !ruby/object:Gem::Requirement
|
|
177
190
|
requirements:
|
|
178
191
|
- - ">="
|
|
179
192
|
- !ruby/object:Gem::Version
|
|
180
|
-
version:
|
|
193
|
+
version: 3.7.0
|
|
181
194
|
- !ruby/object:Gem::Dependency
|
|
182
|
-
name:
|
|
195
|
+
name: ruby-saml
|
|
183
196
|
requirement: !ruby/object:Gem::Requirement
|
|
184
197
|
requirements:
|
|
185
198
|
- - ">="
|
|
186
199
|
- !ruby/object:Gem::Version
|
|
187
|
-
version:
|
|
200
|
+
version: 1.7.2
|
|
188
201
|
type: :development
|
|
189
202
|
prerelease: false
|
|
190
203
|
version_requirements: !ruby/object:Gem::Requirement
|
|
191
204
|
requirements:
|
|
192
205
|
- - ">="
|
|
193
206
|
- !ruby/object:Gem::Version
|
|
194
|
-
version:
|
|
207
|
+
version: 1.7.2
|
|
195
208
|
- !ruby/object:Gem::Dependency
|
|
196
|
-
name:
|
|
209
|
+
name: simplecov
|
|
197
210
|
requirement: !ruby/object:Gem::Requirement
|
|
198
211
|
requirements:
|
|
199
212
|
- - ">="
|
|
@@ -206,6 +219,20 @@ dependencies:
|
|
|
206
219
|
- - ">="
|
|
207
220
|
- !ruby/object:Gem::Version
|
|
208
221
|
version: '0'
|
|
222
|
+
- !ruby/object:Gem::Dependency
|
|
223
|
+
name: timecop
|
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
|
225
|
+
requirements:
|
|
226
|
+
- - ">="
|
|
227
|
+
- !ruby/object:Gem::Version
|
|
228
|
+
version: '0.8'
|
|
229
|
+
type: :development
|
|
230
|
+
prerelease: false
|
|
231
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
232
|
+
requirements:
|
|
233
|
+
- - ">="
|
|
234
|
+
- !ruby/object:Gem::Version
|
|
235
|
+
version: '0.8'
|
|
209
236
|
description: SAML IdP (Identity Provider) Library for Ruby
|
|
210
237
|
email: jon.phenow@sportngin.com
|
|
211
238
|
executables: []
|
|
@@ -215,9 +242,6 @@ files:
|
|
|
215
242
|
- Gemfile
|
|
216
243
|
- LICENSE
|
|
217
244
|
- README.md
|
|
218
|
-
- app/controllers/saml_idp/idp_controller.rb
|
|
219
|
-
- app/views/saml_idp/idp/new.html.erb
|
|
220
|
-
- app/views/saml_idp/idp/saml_post.html.erb
|
|
221
245
|
- lib/saml_idp.rb
|
|
222
246
|
- lib/saml_idp/algorithmable.rb
|
|
223
247
|
- lib/saml_idp/assertion_builder.rb
|
|
@@ -228,6 +252,7 @@ files:
|
|
|
228
252
|
- lib/saml_idp/default.rb
|
|
229
253
|
- lib/saml_idp/encryptor.rb
|
|
230
254
|
- lib/saml_idp/engine.rb
|
|
255
|
+
- lib/saml_idp/fingerprint.rb
|
|
231
256
|
- lib/saml_idp/hashable.rb
|
|
232
257
|
- lib/saml_idp/incoming_metadata.rb
|
|
233
258
|
- lib/saml_idp/logout_builder.rb
|
|
@@ -254,6 +279,7 @@ files:
|
|
|
254
279
|
- spec/lib/saml_idp/configurator_spec.rb
|
|
255
280
|
- spec/lib/saml_idp/controller_spec.rb
|
|
256
281
|
- spec/lib/saml_idp/encryptor_spec.rb
|
|
282
|
+
- spec/lib/saml_idp/fingerprint_spec.rb
|
|
257
283
|
- spec/lib/saml_idp/incoming_metadata_spec.rb
|
|
258
284
|
- spec/lib/saml_idp/logout_request_builder_spec.rb
|
|
259
285
|
- spec/lib/saml_idp/logout_response_builder_spec.rb
|
|
@@ -279,6 +305,8 @@ files:
|
|
|
279
305
|
- spec/rails_app/app/mailers/.gitkeep
|
|
280
306
|
- spec/rails_app/app/models/.gitkeep
|
|
281
307
|
- spec/rails_app/app/views/layouts/application.html.erb
|
|
308
|
+
- spec/rails_app/app/views/saml_idp/idp/new.html.erb
|
|
309
|
+
- spec/rails_app/app/views/saml_idp/idp/saml_post.html.erb
|
|
282
310
|
- spec/rails_app/config.ru
|
|
283
311
|
- spec/rails_app/config/application.rb
|
|
284
312
|
- spec/rails_app/config/boot.rb
|
|
@@ -319,6 +347,9 @@ files:
|
|
|
319
347
|
- spec/spec_helper.rb
|
|
320
348
|
- spec/support/certificates/certificate1
|
|
321
349
|
- spec/support/certificates/r1_certificate2_base64
|
|
350
|
+
- spec/support/certificates/sp_cert_req.csr
|
|
351
|
+
- spec/support/certificates/sp_private_key.pem
|
|
352
|
+
- spec/support/certificates/sp_x509_cert.crt
|
|
322
353
|
- spec/support/responses/adfs_response_sha1.xml
|
|
323
354
|
- spec/support/responses/adfs_response_sha256.xml
|
|
324
355
|
- spec/support/responses/adfs_response_sha384.xml
|
|
@@ -347,22 +378,21 @@ metadata:
|
|
|
347
378
|
homepage_uri: https://github.com/saml-idp/saml_idp
|
|
348
379
|
source_code_uri: https://github.com/saml-idp/saml_idp
|
|
349
380
|
bug_tracker_uri: https://github.com/saml-idp/saml_idp/issues
|
|
350
|
-
documentation_uri: http://rdoc.info/gems/saml_idp/0.
|
|
351
|
-
post_install_message: |
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
If you just need to see the certificate `bundle open saml_idp` and go to
|
|
357
|
-
`lib/saml_idp/default.rb`
|
|
381
|
+
documentation_uri: http://rdoc.info/gems/saml_idp/1.0.0
|
|
382
|
+
post_install_message: |2
|
|
383
|
+
If you're just recently updating saml_idp - please be aware we've changed the default
|
|
384
|
+
certificate. See the PR and a description of why we've done this here:
|
|
385
|
+
https://github.com/saml-idp/saml_idp/pull/29
|
|
358
386
|
|
|
359
|
-
|
|
360
|
-
|
|
387
|
+
If you just need to see the certificate `bundle open saml_idp` and go to
|
|
388
|
+
`lib/saml_idp/default.rb`
|
|
361
389
|
|
|
362
|
-
|
|
390
|
+
Similarly, please see the README about certificates - you should avoid using the
|
|
391
|
+
defaults in a Production environment. Post any issues you to github.
|
|
363
392
|
|
|
364
|
-
|
|
365
|
-
|
|
393
|
+
** New in Version 0.3.0 **
|
|
394
|
+
Encrypted Assertions require the xmlenc gem. See the example in the Controller
|
|
395
|
+
section of the README.
|
|
366
396
|
rdoc_options:
|
|
367
397
|
- "--charset=UTF-8"
|
|
368
398
|
require_paths:
|
|
@@ -371,18 +401,16 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
371
401
|
requirements:
|
|
372
402
|
- - ">="
|
|
373
403
|
- !ruby/object:Gem::Version
|
|
374
|
-
version: '2.
|
|
404
|
+
version: '2.5'
|
|
375
405
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
376
406
|
requirements:
|
|
377
407
|
- - ">="
|
|
378
408
|
- !ruby/object:Gem::Version
|
|
379
409
|
version: '0'
|
|
380
410
|
requirements: []
|
|
381
|
-
|
|
382
|
-
rubygems_version: 2.7.6
|
|
383
|
-
signing_key:
|
|
411
|
+
rubygems_version: 3.6.3
|
|
384
412
|
specification_version: 4
|
|
385
|
-
summary: SAML
|
|
413
|
+
summary: SAML Identity Provider for Ruby
|
|
386
414
|
test_files:
|
|
387
415
|
- spec/acceptance/acceptance_helper.rb
|
|
388
416
|
- spec/acceptance/idp_controller_spec.rb
|
|
@@ -392,6 +420,7 @@ test_files:
|
|
|
392
420
|
- spec/lib/saml_idp/configurator_spec.rb
|
|
393
421
|
- spec/lib/saml_idp/controller_spec.rb
|
|
394
422
|
- spec/lib/saml_idp/encryptor_spec.rb
|
|
423
|
+
- spec/lib/saml_idp/fingerprint_spec.rb
|
|
395
424
|
- spec/lib/saml_idp/incoming_metadata_spec.rb
|
|
396
425
|
- spec/lib/saml_idp/logout_request_builder_spec.rb
|
|
397
426
|
- spec/lib/saml_idp/logout_response_builder_spec.rb
|
|
@@ -417,6 +446,8 @@ test_files:
|
|
|
417
446
|
- spec/rails_app/app/mailers/.gitkeep
|
|
418
447
|
- spec/rails_app/app/models/.gitkeep
|
|
419
448
|
- spec/rails_app/app/views/layouts/application.html.erb
|
|
449
|
+
- spec/rails_app/app/views/saml_idp/idp/new.html.erb
|
|
450
|
+
- spec/rails_app/app/views/saml_idp/idp/saml_post.html.erb
|
|
420
451
|
- spec/rails_app/config.ru
|
|
421
452
|
- spec/rails_app/config/application.rb
|
|
422
453
|
- spec/rails_app/config/boot.rb
|
|
@@ -457,6 +488,9 @@ test_files:
|
|
|
457
488
|
- spec/spec_helper.rb
|
|
458
489
|
- spec/support/certificates/certificate1
|
|
459
490
|
- spec/support/certificates/r1_certificate2_base64
|
|
491
|
+
- spec/support/certificates/sp_cert_req.csr
|
|
492
|
+
- spec/support/certificates/sp_private_key.pem
|
|
493
|
+
- spec/support/certificates/sp_x509_cert.crt
|
|
460
494
|
- spec/support/responses/adfs_response_sha1.xml
|
|
461
495
|
- spec/support/responses/adfs_response_sha256.xml
|
|
462
496
|
- spec/support/responses/adfs_response_sha384.xml
|