spid 0.17.2 → 0.17.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a7a11b70c24ab1e6d40359dd05c34cf4e5bfa0c785bdf988fb02f9c6c992c0b
4
- data.tar.gz: e3864055608e4cba6a1f43d79e4ab02cf1caad03e29c5b978811d1b192740279
3
+ metadata.gz: 373a471d3c7b5987767769a28f606c719a9470f82347e3f337e49a6391bb0a38
4
+ data.tar.gz: 596d1cde1ad8283d5b2fb1ab50d3d969be1072b096497aea9d14dec5ce22c052
5
5
  SHA512:
6
- metadata.gz: 60ed65ef4c9d0c1eb8b295feb39b3113bf40042397da55b2e63d47772b6dec6be7bf46bc78f6064a36511d75cf935766258333f3989e3f144e5c24290a978c50
7
- data.tar.gz: c569e171dfe3b1f4da07c3d4e8a0d5a4b1794cd31f3b449727b27f3221c566ed761a14fdc5cd22d0c930539a122fb527751fb2b3a13a381133828a04251ce69b
6
+ metadata.gz: 8a23bd7418801a537ba5714da4dbf67808b978819780bf9592ca32db148b9ebd14734c65a76730fe4c7ca93f902312acd3c00d908254322ea7a0e9a8670671f6
7
+ data.tar.gz: 99eee38fe1d01a30e26e9efa2a59a8537955e7c2ca623f74c92368bb20eb83bd12b4c80fb926b00f847ba818af72ca7f0b9ca13cbb6d9d615d6a3015e5c3d89e
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.17.3] - 2018-09-12
6
+ ### Fixed
7
+ - Metadata embed now signature
8
+ - Now it's possible to use attributes in attribute services in string format
9
+
5
10
  ## [0.17.2] - 2018-09-11
6
11
  ### Fixed
7
12
  - `Spid::Rack::Login` now use authn_context value
@@ -142,7 +147,8 @@
142
147
  - Coveralls Integration
143
148
  - Rubygems version badge in README
144
149
 
145
- [Unreleased]: https://github.com/italia/spid-ruby/compare/v0.17.2...HEAD
150
+ [Unreleased]: https://github.com/italia/spid-ruby/compare/v0.17.3...HEAD
151
+ [0.17.3]: https://github.com/italia/spid-ruby/compare/v0.17.2...v0.17.3
146
152
  [0.17.2]: https://github.com/italia/spid-ruby/compare/v0.17.1...v0.17.2
147
153
  [0.17.1]: https://github.com/italia/spid-ruby/compare/v0.17.0...v0.17.1
148
154
  [0.17.0]: https://github.com/italia/spid-ruby/compare/v0.16.1...v0.17.0
@@ -10,6 +10,7 @@ require "spid/saml2/logout_request"
10
10
  require "spid/saml2/idp_logout_request"
11
11
  require "spid/saml2/logout_response"
12
12
  require "spid/saml2/idp_logout_response"
13
+ require "spid/saml2/xml_signature"
13
14
  require "spid/saml2/sp_metadata"
14
15
  require "spid/saml2/utils"
15
16
  require "spid/saml2/idp_metadata_parser"
@@ -79,7 +79,7 @@ module Spid
79
79
  def validate_attribute_service(attribute_service)
80
80
  return false unless attribute_service.key?(:name)
81
81
  return false unless attribute_service.key?(:fields)
82
- not_valid_fields = attribute_service[:fields] - ATTRIBUTES
82
+ not_valid_fields = attribute_service[:fields].map(&:to_sym) - ATTRIBUTES
83
83
  not_valid_fields.empty?
84
84
  end
85
85
 
@@ -80,6 +80,10 @@ module Spid
80
80
  service_provider.signature_method
81
81
  end
82
82
 
83
+ def digest_method
84
+ service_provider.digest_method
85
+ end
86
+
83
87
  def acs_index
84
88
  "0"
85
89
  end
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "xmldsig"
4
+
3
5
  module Spid
4
6
  module Saml2
5
7
  # rubocop:disable Metrics/ClassLength
@@ -12,17 +14,27 @@ module Spid
12
14
  @settings = settings
13
15
  end
14
16
 
15
- def to_saml
17
+ def unsigned_document
16
18
  document.add_element(entity_descriptor)
17
19
  document.to_s
18
20
  end
19
21
 
22
+ def signed_document
23
+ doc = Xmldsig::SignedDocument.new(unsigned_document)
24
+ doc.sign(settings.private_key)
25
+ end
26
+
27
+ def to_saml
28
+ signed_document
29
+ end
30
+
20
31
  def entity_descriptor
21
32
  @entity_descriptor ||=
22
33
  begin
23
34
  element = REXML::Element.new("md:EntityDescriptor")
24
35
  element.add_attributes(entity_descriptor_attributes)
25
36
  element.add_element sp_sso_descriptor
37
+ element.add_element signature
26
38
  element
27
39
  end
28
40
  end
@@ -32,7 +44,7 @@ module Spid
32
44
  "xmlns:ds" => "http://www.w3.org/2000/09/xmldsig#",
33
45
  "xmlns:md" => "urn:oasis:names:tc:SAML:2.0:metadata",
34
46
  "entityID" => settings.sp_entity_id,
35
- "ID" => settings.sp_entity_id
47
+ "ID" => entity_descriptor_id
36
48
  }
37
49
  end
38
50
 
@@ -59,6 +71,13 @@ module Spid
59
71
  # rubocop:enable Metrics/AbcSize
60
72
  # rubocop:enable Metrics/MethodLength
61
73
 
74
+ def signature
75
+ @signature ||= ::Spid::Saml2::XmlSignature.new(
76
+ settings: settings,
77
+ sign_reference: entity_descriptor_id
78
+ ).signature
79
+ end
80
+
62
81
  def attribute_consuming_service(index, name, fields)
63
82
  element = REXML::Element.new("md:AttributeConsumingService")
64
83
  element.add_attributes("index" => index)
@@ -132,6 +151,15 @@ module Spid
132
151
  kd
133
152
  end
134
153
  end
154
+
155
+ private
156
+
157
+ def entity_descriptor_id
158
+ @entity_descriptor_id ||=
159
+ begin
160
+ "_#{Digest::MD5.hexdigest(settings.sp_entity_id)}"
161
+ end
162
+ end
135
163
  end
136
164
  # rubocop:enable Metrics/ClassLength
137
165
  end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Spid
4
+ module Saml2
5
+ class XmlSignature # :nodoc:
6
+ attr_reader :settings
7
+ attr_reader :sign_reference
8
+
9
+ def initialize(settings:, sign_reference:)
10
+ @settings = settings
11
+ @sign_reference = sign_reference
12
+ end
13
+
14
+ def signature
15
+ @signature ||=
16
+ begin
17
+ element = REXML::Element.new("ds:Signature")
18
+ element.add_element(signed_info)
19
+ element.add_element(signature_value)
20
+ element
21
+ end
22
+ end
23
+
24
+ def signed_info
25
+ @signed_info ||=
26
+ begin
27
+ element = REXML::Element.new("ds:SignedInfo")
28
+ element.add_element(canonicalization_method)
29
+ element.add_element(signature_method)
30
+ element.add_element(reference)
31
+ element
32
+ end
33
+ end
34
+
35
+ def canonicalization_method
36
+ @canonicalization_method ||=
37
+ begin
38
+ element = REXML::Element.new("ds:CanonicalizationMethod")
39
+ element.add_attributes(
40
+ "Algorithm" => "http://www.w3.org/2001/10/xml-exc-c14n#"
41
+ )
42
+ element
43
+ end
44
+ end
45
+
46
+ def signature_method
47
+ @signature_method ||=
48
+ begin
49
+ element = REXML::Element.new("ds:SignatureMethod")
50
+ element.add_attributes("Algorithm" => settings.signature_method)
51
+ element
52
+ end
53
+ end
54
+
55
+ def reference
56
+ @reference ||=
57
+ begin
58
+ element = REXML::Element.new("ds:Reference")
59
+ element.add_attributes("URI" => "##{sign_reference}")
60
+ element.add_element(transforms)
61
+ element.add_element(digest_method)
62
+ element.add_element(digest_value)
63
+ element
64
+ end
65
+ end
66
+
67
+ def transforms
68
+ @transforms ||=
69
+ begin
70
+ element = REXML::Element.new("ds:Transforms")
71
+ element.add_element(transform_enveloped)
72
+ element.add_element(transform_xml)
73
+ element
74
+ end
75
+ end
76
+
77
+ def transform_enveloped
78
+ @transform_enveloped ||=
79
+ begin
80
+ element = REXML::Element.new("ds:Transform")
81
+ element.add_attributes(
82
+ "Algorithm" =>
83
+ "http://www.w3.org/2000/09/xmldsig#enveloped-signature"
84
+ )
85
+ element
86
+ end
87
+ end
88
+
89
+ def transform_xml
90
+ @transform_xml ||=
91
+ begin
92
+ element = REXML::Element.new("ds:Transform")
93
+ element.add_attributes(
94
+ "Algorithm" => "http://www.w3.org/2001/10/xml-exc-c14n#"
95
+ )
96
+ element
97
+ end
98
+ end
99
+
100
+ def digest_method
101
+ @digest_method ||=
102
+ begin
103
+ element = REXML::Element.new("ds:DigestMethod")
104
+ element.add_attributes("Algorithm" => settings.digest_method)
105
+ element
106
+ end
107
+ end
108
+
109
+ def digest_value
110
+ @digest_value ||= REXML::Element.new("ds:DigestValue")
111
+ end
112
+
113
+ def signature_value
114
+ @signature_value ||= REXML::Element.new("ds:SignatureValue")
115
+ end
116
+ end
117
+ end
118
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Spid
4
- VERSION = "0.17.2"
4
+ VERSION = "0.17.3"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spid
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.17.2
4
+ version: 0.17.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Librera
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-11 00:00:00.000000000 Z
11
+ date: 2018-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -349,6 +349,7 @@ files:
349
349
  - lib/spid/saml2/sp_metadata.rb
350
350
  - lib/spid/saml2/utils.rb
351
351
  - lib/spid/saml2/utils/query_params_signer.rb
352
+ - lib/spid/saml2/xml_signature.rb
352
353
  - lib/spid/slo.rb
353
354
  - lib/spid/slo/idp_request.rb
354
355
  - lib/spid/slo/request.rb