ruby-saml 0.8.17 → 0.8.18
Sign up to get free protection for your applications and to get access to all the features.
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
|