ruby-saml 0.8.17 → 0.8.18
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.
Potentially problematic release.
This version of ruby-saml might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/onelogin/ruby-saml/authrequest.rb +5 -1
- data/lib/onelogin/ruby-saml/logoutrequest.rb +5 -1
- data/lib/onelogin/ruby-saml/logoutresponse.rb +11 -0
- data/lib/onelogin/ruby-saml/response.rb +18 -0
- data/lib/onelogin/ruby-saml/slo_logoutrequest.rb +11 -0
- data/lib/onelogin/ruby-saml/slo_logoutresponse.rb +9 -4
- data/lib/onelogin/ruby-saml/version.rb +1 -1
- data/test/logoutrequest_test.rb +11 -0
- data/test/logoutresponse_test.rb +8 -1
- data/test/request_test.rb +10 -0
- data/test/requests/logoutrequest_fixtures.rb +1 -1
- data/test/response_test.rb +7 -0
- data/test/responses/logoutresponse_fixtures.rb +3 -2
- data/test/slo_logoutrequest_test.rb +7 -0
- data/test/slo_logoutresponse_test.rb +11 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7f02b4fb1490e44140c1e24ea61bf0ef061f0da
|
4
|
+
data.tar.gz: 3b2fec942140bb2fd2e49a17fc29dd0d0327d814
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a2dade6d6d672b213a3f8d3af088edfa208f3af4482aae033a40ff8ac9c500ca48fded7eee073e67dd6f37daa27786a6303777e0381a3338f987f87a63f460a2
|
7
|
+
data.tar.gz: 0cc6bb2264de5c688545bcb24794313758a97cca3c9bfa5c69b07331ffbc719acb1a69039ec39aa2e5e6817e8917e7495da7c07a41eff120d57f30e9708962bc
|
@@ -9,7 +9,7 @@ module OneLogin
|
|
9
9
|
|
10
10
|
class Authrequest
|
11
11
|
# AuthNRequest ID
|
12
|
-
|
12
|
+
attr_accessor :uuid
|
13
13
|
|
14
14
|
# Initializes the AuthNRequest. An Authrequest Object.
|
15
15
|
# Asigns an ID, a random uuid.
|
@@ -18,6 +18,10 @@ module OneLogin
|
|
18
18
|
@uuid = OneLogin::RubySaml::Utils.uuid
|
19
19
|
end
|
20
20
|
|
21
|
+
def request_id
|
22
|
+
@uuid
|
23
|
+
end
|
24
|
+
|
21
25
|
def create(settings, params = {})
|
22
26
|
params = create_params(settings, params)
|
23
27
|
params_prefix = (settings.idp_sso_target_url =~ /\?/) ? '&' : '?'
|
@@ -10,12 +10,16 @@ module OneLogin
|
|
10
10
|
|
11
11
|
class Logoutrequest
|
12
12
|
|
13
|
-
|
13
|
+
attr_accessor :uuid
|
14
14
|
|
15
15
|
def initialize
|
16
16
|
@uuid = OneLogin::RubySaml::Utils.uuid
|
17
17
|
end
|
18
18
|
|
19
|
+
def request_id
|
20
|
+
@uuid
|
21
|
+
end
|
22
|
+
|
19
23
|
def create(settings, params={})
|
20
24
|
params = create_params(settings, params)
|
21
25
|
params_prefix = (settings.idp_slo_target_url =~ /\?/) ? '&' : '?'
|
@@ -32,6 +32,17 @@ module OneLogin
|
|
32
32
|
@document = XMLSecurity::SignedDocument.new(@response)
|
33
33
|
end
|
34
34
|
|
35
|
+
def response_id
|
36
|
+
@response_id ||= begin
|
37
|
+
node = REXML::XPath.first(
|
38
|
+
document,
|
39
|
+
"/p:LogoutResponse",
|
40
|
+
{ "p" => PROTOCOL }
|
41
|
+
)
|
42
|
+
node.nil? ? nil : node.attributes['ID']
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
35
46
|
def validate!
|
36
47
|
validate(false)
|
37
48
|
end
|
@@ -27,6 +27,24 @@ module OneLogin
|
|
27
27
|
@document = XMLSecurity::SignedDocument.new(@response)
|
28
28
|
end
|
29
29
|
|
30
|
+
def response_id
|
31
|
+
@response_id ||= begin
|
32
|
+
node = REXML::XPath.first(
|
33
|
+
document,
|
34
|
+
"/p:Response",
|
35
|
+
{ "p" => PROTOCOL }
|
36
|
+
)
|
37
|
+
node.nil? ? nil : node.attributes['ID']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def assertion_id
|
42
|
+
@assertion_id ||= begin
|
43
|
+
node = xpath_first_from_signed_assertion("")
|
44
|
+
node.nil? ? nil : node.attributes['ID']
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
30
48
|
def is_valid?
|
31
49
|
validate
|
32
50
|
end
|
@@ -26,6 +26,17 @@ module OneLogin
|
|
26
26
|
@document = XMLSecurity::SignedDocument.new(@request)
|
27
27
|
end
|
28
28
|
|
29
|
+
def request_id
|
30
|
+
@request_id ||= begin
|
31
|
+
node = REXML::XPath.first(
|
32
|
+
document,
|
33
|
+
"/p:LogoutRequest",
|
34
|
+
{ "p" => PROTOCOL }
|
35
|
+
)
|
36
|
+
node.nil? ? nil : node.attributes['ID']
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
29
40
|
def validate!
|
30
41
|
validate(false)
|
31
42
|
end
|
@@ -12,7 +12,7 @@ module OneLogin
|
|
12
12
|
class SloLogoutresponse
|
13
13
|
|
14
14
|
# Logout Response ID
|
15
|
-
|
15
|
+
attr_accessor :uuid
|
16
16
|
|
17
17
|
# Initializes the Logout Response. A SloLogoutresponse Object.
|
18
18
|
# Asigns an ID, a random uuid.
|
@@ -21,6 +21,10 @@ module OneLogin
|
|
21
21
|
@uuid = OneLogin::RubySaml::Utils.uuid
|
22
22
|
end
|
23
23
|
|
24
|
+
def response_id
|
25
|
+
@uuid
|
26
|
+
end
|
27
|
+
|
24
28
|
# Creates the Logout Response string.
|
25
29
|
# @param settings [OneLogin::RubySaml::Settings|nil] Toolkit settings
|
26
30
|
# @param request_id [String] The ID of the LogoutRequest sent by this SP to the IdP. That ID will be placed as the InResponseTo in the logout response
|
@@ -104,6 +108,7 @@ module OneLogin
|
|
104
108
|
# @param settings [OneLogin::RubySaml::Settings|nil] Toolkit settings
|
105
109
|
# @param request_id [String] The ID of the LogoutRequest sent by this SP to the IdP. That ID will be placed as the InResponseTo in the logout response
|
106
110
|
# @param logout_message [String] The Message to be placed as StatusMessage in the logout response
|
111
|
+
# @param logout_status_code [String] The StatusCode to be placed as StatusMessage in the logout response
|
107
112
|
# @return [String] The SAMLResponse String.
|
108
113
|
#
|
109
114
|
def create_logout_response_xml_doc(settings, request_id = nil, logout_message = nil, logout_status_code = nil)
|
@@ -129,15 +134,15 @@ module OneLogin
|
|
129
134
|
issuer.text = settings.sp_entity_id
|
130
135
|
end
|
131
136
|
|
132
|
-
# add
|
137
|
+
# add status
|
133
138
|
status = root.add_element 'samlp:Status'
|
134
139
|
|
135
|
-
#
|
140
|
+
# status code
|
136
141
|
status_code ||= 'urn:oasis:names:tc:SAML:2.0:status:Success'
|
137
142
|
status_code_elem = status.add_element 'samlp:StatusCode'
|
138
143
|
status_code_elem.attributes['Value'] = status_code
|
139
144
|
|
140
|
-
#
|
145
|
+
# status message
|
141
146
|
logout_message ||= 'Successfully Signed Out'
|
142
147
|
status_message = status.add_element 'samlp:StatusMessage'
|
143
148
|
status_message.text = logout_message
|
data/test/logoutrequest_test.rb
CHANGED
@@ -240,5 +240,16 @@ class LogoutRequestTest < Minitest::Test
|
|
240
240
|
assert cert.public_key.verify(signature_algorithm.new, Base64.decode64(params['Signature']), query_string)
|
241
241
|
end
|
242
242
|
end
|
243
|
+
|
244
|
+
describe "#manipulate request_id" do
|
245
|
+
it "be able to modify the request id" do
|
246
|
+
logoutrequest = OneLogin::RubySaml::Logoutrequest.new
|
247
|
+
request_id = logoutrequest.request_id
|
248
|
+
assert_equal request_id, logoutrequest.uuid
|
249
|
+
logoutrequest.uuid = "new_uuid"
|
250
|
+
assert_equal logoutrequest.request_id, logoutrequest.uuid
|
251
|
+
assert_equal "new_uuid", logoutrequest.request_id
|
252
|
+
end
|
253
|
+
end
|
243
254
|
end
|
244
255
|
end
|
data/test/logoutresponse_test.rb
CHANGED
@@ -33,7 +33,7 @@ class LogoutResponseTest < Minitest::Test
|
|
33
33
|
it "validate the response" do
|
34
34
|
in_relation_to_request_id = random_id
|
35
35
|
settings.idp_entity_id = "https://example.com/idp"
|
36
|
-
logoutresponse = OneLogin::RubySaml::Logoutresponse.new(valid_response({:
|
36
|
+
logoutresponse = OneLogin::RubySaml::Logoutresponse.new(valid_response({:uuid2 => in_relation_to_request_id}), settings)
|
37
37
|
|
38
38
|
assert logoutresponse.validate
|
39
39
|
|
@@ -94,5 +94,12 @@ class LogoutResponseTest < Minitest::Test
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
+
describe "#response_id" do
|
98
|
+
it "extract the value of the Response ID" do
|
99
|
+
logoutresponse = OneLogin::RubySaml::Logoutresponse.new(valid_response, settings)
|
100
|
+
assert_equal "_28024690-000e-0130-b6d2-38f6b112be8b", logoutresponse.response_id
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
97
104
|
end
|
98
105
|
end
|
data/test/request_test.rb
CHANGED
@@ -224,6 +224,16 @@ class RequestTest < Minitest::Test
|
|
224
224
|
end
|
225
225
|
end
|
226
226
|
|
227
|
+
describe "#manipulate request_id" do
|
228
|
+
it "be able to modify the request id" do
|
229
|
+
authnrequest = OneLogin::RubySaml::Authrequest.new
|
230
|
+
request_id = authnrequest.request_id
|
231
|
+
assert_equal request_id, authnrequest.uuid
|
232
|
+
authnrequest.uuid = "new_uuid"
|
233
|
+
assert_equal authnrequest.request_id, authnrequest.uuid
|
234
|
+
assert_equal "new_uuid", authnrequest.request_id
|
235
|
+
end
|
236
|
+
end
|
227
237
|
end
|
228
238
|
|
229
239
|
end
|
@@ -16,7 +16,7 @@ def valid_request(opts = {})
|
|
16
16
|
"<samlp:LogoutRequest
|
17
17
|
xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"
|
18
18
|
xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\"
|
19
|
-
ID=\"#{
|
19
|
+
ID=\"#{opts[:uuid]}\" Version=\"2.0\"
|
20
20
|
IssueInstant=\"#{opts[:issue_instant]}\"
|
21
21
|
Destination=\"#{opts[:settings].idp_slo_target_url}\">
|
22
22
|
<saml:Issuer>#{opts[:settings].idp_entity_id}</saml:Issuer>
|
data/test/response_test.rb
CHANGED
@@ -384,6 +384,13 @@ class ResponseTest < Minitest::Test
|
|
384
384
|
end
|
385
385
|
end
|
386
386
|
|
387
|
+
describe "#response_id and assertion_id" do
|
388
|
+
it "extract the value of the Response and Assertion IDs" do
|
389
|
+
response = OneLogin::RubySaml::Response.new(response_document)
|
390
|
+
assert_equal "GOSAMLR12901174571794", response.response_id
|
391
|
+
assert_equal "pfxa46574df-b3b0-a06a-23c8-636413198772", response.assertion_id
|
392
|
+
end
|
393
|
+
end
|
387
394
|
|
388
395
|
describe "#check_conditions" do
|
389
396
|
it "check time conditions" do
|
@@ -3,6 +3,7 @@
|
|
3
3
|
def default_response_opts
|
4
4
|
{
|
5
5
|
:uuid => "_28024690-000e-0130-b6d2-38f6b112be8b",
|
6
|
+
:uuid2 => "_48024690-100e-1130-e6d2-28f6b112be71",
|
6
7
|
:issue_instant => Time.now.strftime('%Y-%m-%dT%H:%M:%SZ'),
|
7
8
|
:settings => settings
|
8
9
|
}
|
@@ -13,10 +14,10 @@ def valid_response(opts = {})
|
|
13
14
|
|
14
15
|
"<samlp:LogoutResponse
|
15
16
|
xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"
|
16
|
-
ID=\"#{
|
17
|
+
ID=\"#{opts[:uuid]}\" Version=\"2.0\"
|
17
18
|
IssueInstant=\"#{opts[:issue_instant]}\"
|
18
19
|
Destination=\"#{opts[:settings].idp_slo_target_url}\"
|
19
|
-
InResponseTo=\"#{opts[:
|
20
|
+
InResponseTo=\"#{opts[:uuid2]}\">
|
20
21
|
<saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">#{opts[:settings].idp_entity_id}</saml:Issuer>
|
21
22
|
<samlp:Status xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\">
|
22
23
|
<samlp:StatusCode xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"
|
@@ -62,5 +62,12 @@ class SloLogoutrequestTest < Minitest::Test
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
65
|
+
describe "#request_id" do
|
66
|
+
it "extract the value of the Response ID" do
|
67
|
+
logoutrequest = OneLogin::RubySaml::SloLogoutrequest.new(valid_request, settings)
|
68
|
+
assert_equal "_28024690-000e-0130-b6d2-38f6b112be8b", logoutrequest.request_id
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
65
72
|
end
|
66
73
|
end
|
@@ -230,5 +230,16 @@ class SloLogoutresponseTest < Minitest::Test
|
|
230
230
|
assert cert.public_key.verify(signature_algorithm.new, Base64.decode64(params['Signature']), query_string)
|
231
231
|
end
|
232
232
|
end
|
233
|
+
|
234
|
+
describe "#manipulate response_id" do
|
235
|
+
it "be able to modify the response id" do
|
236
|
+
logoutresponse = OneLogin::RubySaml::SloLogoutresponse.new
|
237
|
+
response_id = logoutresponse.response_id
|
238
|
+
assert_equal response_id, logoutresponse.uuid
|
239
|
+
logoutresponse.uuid = "new_uuid"
|
240
|
+
assert_equal logoutresponse.response_id, logoutresponse.uuid
|
241
|
+
assert_equal "new_uuid", logoutresponse.response_id
|
242
|
+
end
|
243
|
+
end
|
233
244
|
end
|
234
245
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-saml
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OneLogin LLC
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-09-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: uuid
|
@@ -165,7 +165,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
165
165
|
version: '0'
|
166
166
|
requirements: []
|
167
167
|
rubyforge_project: http://www.rubygems.org/gems/ruby-saml
|
168
|
-
rubygems_version: 2.
|
168
|
+
rubygems_version: 2.4.8
|
169
169
|
signing_key:
|
170
170
|
specification_version: 4
|
171
171
|
summary: SAML Ruby Tookit
|