spid 0.10.0 → 0.11.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/.rubocop.yml +3 -0
- data/CHANGELOG.md +6 -1
- data/Gemfile +0 -6
- data/README.md +11 -14
- data/lib/spid.rb +16 -10
- data/lib/spid/configuration.rb +27 -19
- data/lib/spid/identity_provider_manager.rb +14 -4
- data/lib/spid/metadata.rb +10 -77
- data/lib/spid/rack/login.rb +1 -1
- data/lib/spid/rack/logout.rb +1 -1
- data/lib/spid/saml2.rb +17 -0
- data/lib/spid/saml2/authn_request.rb +104 -0
- data/lib/spid/saml2/identity_provider.rb +27 -0
- data/lib/spid/saml2/idp_metadata_parser.rb +283 -0
- data/lib/spid/saml2/logout_request.rb +88 -0
- data/lib/spid/saml2/logout_response.rb +33 -0
- data/lib/spid/saml2/response.rb +58 -0
- data/lib/spid/saml2/service_provider.rb +78 -0
- data/lib/spid/saml2/settings.rb +85 -0
- data/lib/spid/saml2/sp_metadata.rb +104 -0
- data/lib/spid/saml2/utils.rb +62 -0
- data/lib/spid/saml2/utils/query_params_signer.rb +75 -0
- data/lib/spid/slo.rb +0 -1
- data/lib/spid/slo/request.rb +29 -20
- data/lib/spid/slo/response.rb +5 -32
- data/lib/spid/sso.rb +0 -1
- data/lib/spid/sso/request.rb +26 -19
- data/lib/spid/sso/response.rb +9 -30
- data/lib/spid/version.rb +1 -1
- data/spid.gemspec +1 -1
- metadata +28 -28
- data/lib/spid/authn_request.rb +0 -28
- data/lib/spid/identity_provider.rb +0 -60
- data/lib/spid/logout_request.rb +0 -21
- data/lib/spid/service_provider.rb +0 -107
- data/lib/spid/slo/settings.rb +0 -53
- data/lib/spid/sso/settings.rb +0 -62
@@ -1,107 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "uri"
|
4
|
-
|
5
|
-
module Spid
|
6
|
-
class ServiceProvider # :nodoc:
|
7
|
-
attr_reader :host
|
8
|
-
attr_reader :acs_path
|
9
|
-
attr_reader :slo_path
|
10
|
-
attr_reader :metadata_path
|
11
|
-
attr_reader :private_key
|
12
|
-
attr_reader :certificate
|
13
|
-
attr_reader :digest_method
|
14
|
-
attr_reader :signature_method
|
15
|
-
attr_reader :attribute_service_name
|
16
|
-
|
17
|
-
# rubocop:disable Metrics/ParameterLists
|
18
|
-
def initialize(
|
19
|
-
host:,
|
20
|
-
acs_path:,
|
21
|
-
slo_path:,
|
22
|
-
metadata_path:,
|
23
|
-
private_key:,
|
24
|
-
certificate:,
|
25
|
-
digest_method:,
|
26
|
-
signature_method:,
|
27
|
-
attribute_service_name:
|
28
|
-
)
|
29
|
-
@host = host
|
30
|
-
@acs_path = acs_path
|
31
|
-
@slo_path = slo_path
|
32
|
-
@metadata_path = metadata_path
|
33
|
-
@private_key = private_key
|
34
|
-
@certificate = certificate
|
35
|
-
@digest_method = digest_method
|
36
|
-
@signature_method = signature_method
|
37
|
-
@attribute_service_name = attribute_service_name
|
38
|
-
validate_attributes
|
39
|
-
end
|
40
|
-
# rubocop:enable Metrics/ParameterLists
|
41
|
-
|
42
|
-
def acs_url
|
43
|
-
@acs_url ||= URI.join(host, acs_path).to_s
|
44
|
-
end
|
45
|
-
|
46
|
-
def slo_url
|
47
|
-
@slo_url ||= URI.join(host, slo_path).to_s
|
48
|
-
end
|
49
|
-
|
50
|
-
def metadata_url
|
51
|
-
@metadata_url ||= URI.join(host, metadata_path).to_s
|
52
|
-
end
|
53
|
-
|
54
|
-
# rubocop:disable Metrics/MethodLength
|
55
|
-
def sso_attributes
|
56
|
-
@sso_attributes ||=
|
57
|
-
begin
|
58
|
-
{
|
59
|
-
assertion_consumer_service_url: acs_url,
|
60
|
-
issuer: host,
|
61
|
-
private_key: private_key,
|
62
|
-
certificate: certificate,
|
63
|
-
security: {
|
64
|
-
authn_requests_signed: true,
|
65
|
-
embed_sign: false,
|
66
|
-
digest_method: digest_method,
|
67
|
-
signature_method: signature_method
|
68
|
-
}
|
69
|
-
}
|
70
|
-
end
|
71
|
-
end
|
72
|
-
# rubocop:enable Metrics/MethodLength
|
73
|
-
|
74
|
-
# rubocop:disable Metrics/MethodLength
|
75
|
-
def slo_attributes
|
76
|
-
@slo_attributes ||=
|
77
|
-
begin
|
78
|
-
{
|
79
|
-
issuer: host,
|
80
|
-
private_key: private_key,
|
81
|
-
certificate: certificate,
|
82
|
-
security: {
|
83
|
-
logout_requests_signed: true,
|
84
|
-
embed_sign: false,
|
85
|
-
digest_method: digest_method,
|
86
|
-
signature_method: signature_method
|
87
|
-
}
|
88
|
-
}
|
89
|
-
end
|
90
|
-
end
|
91
|
-
# rubocop:enable Metrics/MethodLength
|
92
|
-
|
93
|
-
private
|
94
|
-
|
95
|
-
def validate_attributes
|
96
|
-
if !DIGEST_METHODS.include?(digest_method)
|
97
|
-
raise UnknownDigestMethodError,
|
98
|
-
"Provided digest method is not valid:" \
|
99
|
-
" use one of #{DIGEST_METHODS.join(', ')}"
|
100
|
-
elsif !SIGNATURE_METHODS.include?(signature_method)
|
101
|
-
raise UnknownSignatureMethodError,
|
102
|
-
"Provided digest method is not valid:" \
|
103
|
-
" use one of #{SIGNATURE_METHODS.join(', ')}"
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
data/lib/spid/slo/settings.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require "onelogin/ruby-saml/settings"
|
4
|
-
|
5
|
-
module Spid
|
6
|
-
module Slo
|
7
|
-
class Settings # :nodoc:
|
8
|
-
attr_reader :service_provider
|
9
|
-
attr_reader :identity_provider
|
10
|
-
attr_reader :session_index
|
11
|
-
|
12
|
-
def initialize(
|
13
|
-
service_provider:,
|
14
|
-
identity_provider:,
|
15
|
-
session_index:
|
16
|
-
)
|
17
|
-
@service_provider = service_provider
|
18
|
-
@identity_provider = identity_provider
|
19
|
-
@session_index = session_index
|
20
|
-
end
|
21
|
-
|
22
|
-
def saml_settings
|
23
|
-
::OneLogin::RubySaml::Settings.new(slo_attributes)
|
24
|
-
end
|
25
|
-
|
26
|
-
def slo_attributes
|
27
|
-
[
|
28
|
-
service_provider.slo_attributes,
|
29
|
-
identity_provider.slo_attributes,
|
30
|
-
inner_slo_attributes
|
31
|
-
].inject(:merge)
|
32
|
-
end
|
33
|
-
|
34
|
-
def inner_slo_attributes
|
35
|
-
{
|
36
|
-
name_identifier_value: generated_name_identifier_value,
|
37
|
-
name_identifier_format: name_identifier_format_value,
|
38
|
-
sessionindex: session_index
|
39
|
-
}
|
40
|
-
end
|
41
|
-
|
42
|
-
private
|
43
|
-
|
44
|
-
def generated_name_identifier_value
|
45
|
-
::OneLogin::RubySaml::Utils.uuid
|
46
|
-
end
|
47
|
-
|
48
|
-
def name_identifier_format_value
|
49
|
-
"urn:oasis:names:tc:SAML:2.0:nameid-format:transient"
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
data/lib/spid/sso/settings.rb
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Spid
|
4
|
-
module Sso
|
5
|
-
class Settings # :nodoc:
|
6
|
-
attr_reader :service_provider
|
7
|
-
attr_reader :identity_provider
|
8
|
-
attr_reader :authn_context
|
9
|
-
|
10
|
-
def initialize(
|
11
|
-
service_provider:,
|
12
|
-
identity_provider:,
|
13
|
-
authn_context: Spid::L1
|
14
|
-
)
|
15
|
-
|
16
|
-
unless AUTHN_CONTEXTS.include?(authn_context)
|
17
|
-
raise Spid::UnknownAuthnContextError,
|
18
|
-
"Provided authn_context is not valid:" \
|
19
|
-
" use one of #{AUTHN_CONTEXTS.join(', ')}"
|
20
|
-
end
|
21
|
-
|
22
|
-
@service_provider = service_provider
|
23
|
-
@identity_provider = identity_provider
|
24
|
-
@authn_context = authn_context
|
25
|
-
end
|
26
|
-
|
27
|
-
def saml_settings
|
28
|
-
::OneLogin::RubySaml::Settings.new(sso_attributes)
|
29
|
-
end
|
30
|
-
|
31
|
-
def sso_attributes
|
32
|
-
[
|
33
|
-
service_provider.sso_attributes,
|
34
|
-
identity_provider.sso_attributes,
|
35
|
-
inner_sso_attributes,
|
36
|
-
force_authn_attributes
|
37
|
-
].inject(:merge)
|
38
|
-
end
|
39
|
-
|
40
|
-
def inner_sso_attributes
|
41
|
-
{
|
42
|
-
protocol_binding: protocol_binding_value,
|
43
|
-
authn_context: authn_context,
|
44
|
-
authn_context_comparison: Spid::MINIMUM_COMPARISON
|
45
|
-
}
|
46
|
-
end
|
47
|
-
|
48
|
-
def force_authn_attributes
|
49
|
-
return {} if authn_context <= Spid::L1
|
50
|
-
{
|
51
|
-
force_authn: true
|
52
|
-
}
|
53
|
-
end
|
54
|
-
|
55
|
-
private
|
56
|
-
|
57
|
-
def protocol_binding_value
|
58
|
-
"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
|
59
|
-
end
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|