soar_authentication_token 7.1.0 → 7.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/soar_authentication_token/providers/cascade_provider.rb +2 -5
- data/lib/soar_authentication_token/providers/cookie_provider.rb +2 -5
- data/lib/soar_authentication_token/version.rb +1 -1
- data/spec/rack_middleware/authorization_header_provider_spec.rb +13 -0
- data/spec/rack_middleware/cascade_provider_spec.rb +13 -0
- data/spec/rack_middleware/cookie_provider_spec.rb +13 -0
- data/spec/rack_middleware/{authorization_header_spec.rb → shared/authentication_provider.rb} +44 -38
- metadata +11 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2b4f619d0d797e93284b3304502fd1276682f36
|
4
|
+
data.tar.gz: fff0d61305cd10caa846cfd3ec1e6feeca88e075
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8c06b734c3fb22365d3085f6922faa9f004abe98be2b9c57ae02a77a56fe50ecb3d18e44a44543fef791e3bb41132c21e7087df7d1b3b4b72cffd677e474d19d
|
7
|
+
data.tar.gz: 44a8975ee1e0d70484b05a09725dc4fa11b06bfec4d683813d3564bf9049c0780aadeda39a51669691b591ee0cbce2bb468d3be397b3251f51691545c6a11524
|
@@ -13,12 +13,9 @@ module SoarAuthenticationToken
|
|
13
13
|
private
|
14
14
|
def fetch_by_cookie(request)
|
15
15
|
return false unless request.env.has_key?('HTTP_COOKIE')
|
16
|
+
return false unless request.cookies.has_key?(@configuration['cookie_name'])
|
16
17
|
|
17
|
-
|
18
|
-
auth_cookie = cookies.find { |cookie| cookie.name == @configuration['cookie_name'] }
|
19
|
-
return false unless auth_cookie.is_a?(HTTP::Cookie)
|
20
|
-
|
21
|
-
auth_cookie.value
|
18
|
+
request.cookies[@configuration['cookie_name']]
|
22
19
|
end
|
23
20
|
|
24
21
|
def fetch_by_auth_header(request)
|
@@ -9,12 +9,9 @@ module SoarAuthenticationToken
|
|
9
9
|
|
10
10
|
def fetch(request)
|
11
11
|
return false unless request.env.has_key?('HTTP_COOKIE')
|
12
|
+
return false unless request.cookies.has_key?(@configuration['cookie_name'])
|
12
13
|
|
13
|
-
|
14
|
-
auth_cookie = cookies.find { |cookie| cookie.name == @configuration['cookie_name'] }
|
15
|
-
return false unless auth_cookie.is_a?(HTTP::Cookie)
|
16
|
-
|
17
|
-
auth_cookie.value
|
14
|
+
request.cookies[@configuration['cookie_name']]
|
18
15
|
end
|
19
16
|
|
20
17
|
def validate_configuration
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rack'
|
3
|
+
require 'rack/test'
|
4
|
+
require 'webmock/rspec'
|
5
|
+
require_relative 'shared/authentication_provider'
|
6
|
+
|
7
|
+
describe 'Authorization Header provider' do
|
8
|
+
let(:auth_provider) {
|
9
|
+
'SoarAuthenticationToken::AuthorizationHeaderProvider'
|
10
|
+
}
|
11
|
+
|
12
|
+
it_behaves_like "an authentication provider"
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rack'
|
3
|
+
require 'rack/test'
|
4
|
+
require 'webmock/rspec'
|
5
|
+
require_relative 'shared/authentication_provider'
|
6
|
+
|
7
|
+
describe 'Cascade provider' do
|
8
|
+
let(:auth_provider) {
|
9
|
+
'SoarAuthenticationToken::CascadeProvider'
|
10
|
+
}
|
11
|
+
|
12
|
+
it_behaves_like "an authentication provider"
|
13
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rack'
|
3
|
+
require 'rack/test'
|
4
|
+
require 'webmock/rspec'
|
5
|
+
require_relative 'shared/authentication_provider'
|
6
|
+
|
7
|
+
describe 'Cookie provider' do
|
8
|
+
let(:auth_provider) {
|
9
|
+
'SoarAuthenticationToken::CookieProvider'
|
10
|
+
}
|
11
|
+
|
12
|
+
it_behaves_like "an authentication provider"
|
13
|
+
end
|
data/spec/rack_middleware/{authorization_header_spec.rb → shared/authentication_provider.rb}
RENAMED
@@ -1,18 +1,19 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'rack'
|
3
|
-
require 'rack/test'
|
4
|
-
require 'webmock/rspec'
|
5
2
|
|
6
|
-
|
3
|
+
shared_examples_for "an authentication provider" do
|
7
4
|
include Rack::Test::Methods
|
8
5
|
|
6
|
+
let(:version) {
|
7
|
+
SoarAuthenticationToken::VERSION
|
8
|
+
}
|
9
|
+
|
9
10
|
def create_valid_token_generator
|
10
11
|
keypair_generator = SoarAuthenticationToken::KeypairGenerator.new
|
11
12
|
private_key, public_key = keypair_generator.generate
|
12
13
|
configuration = {
|
13
|
-
|
14
|
-
|
15
|
-
|
14
|
+
'provider' => 'SoarAuthenticationToken::RemoteTokenGenerator',
|
15
|
+
'generator-url' => 'http://authentication-token-generator-service:9393/generate',
|
16
|
+
'generator-client-auth-token' => 'test_ecosystem_token_for_auth_token_aaapi_authenticator_service'
|
16
17
|
}
|
17
18
|
generator = SoarAuthenticationToken::TokenGenerator.new(configuration)
|
18
19
|
generator.inject_store_provider(get_store)
|
@@ -23,9 +24,9 @@ describe SoarAuthenticationToken::RackMiddleware do
|
|
23
24
|
keypair_generator = SoarAuthenticationToken::KeypairGenerator.new
|
24
25
|
private_key, public_key = keypair_generator.generate
|
25
26
|
configuration = {
|
26
|
-
|
27
|
-
|
28
|
-
|
27
|
+
'provider' => 'SoarAuthenticationToken::JwtTokenGenerator',
|
28
|
+
'private_key' => private_key,
|
29
|
+
'public_key' => public_key
|
29
30
|
}
|
30
31
|
generator = SoarAuthenticationToken::TokenGenerator.new(configuration)
|
31
32
|
generator.inject_store_provider(get_store)
|
@@ -41,9 +42,9 @@ describe SoarAuthenticationToken::RackMiddleware do
|
|
41
42
|
@local_valid_generator, @valid_private_key, @valid_public_key = create_valid_token_generator
|
42
43
|
@local_invalid_generator, @invalid_private_key, @invalid_public_key = create_invalid_token_generator
|
43
44
|
@failure_response_json = [ { 'status' => 'fail', 'data' => {
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
'notifications' => ['Not authenticated']
|
46
|
+
}
|
47
|
+
}.to_json ]
|
47
48
|
end
|
48
49
|
|
49
50
|
before :each do
|
@@ -51,19 +52,20 @@ describe SoarAuthenticationToken::RackMiddleware do
|
|
51
52
|
request = Rack::Request.new env
|
52
53
|
session = request.session
|
53
54
|
test_app_response_data = {
|
54
|
-
|
55
|
-
|
56
|
-
|
55
|
+
'message' => "tested with authenticated user #{session['user']}",
|
56
|
+
'user' => session['user'],
|
57
|
+
'auth_token_meta' => session['auth_token_meta']
|
57
58
|
}
|
58
59
|
[200, {"Content-Type" => "application/json"}, test_app_response_data ]
|
59
60
|
end
|
60
61
|
@iut_configuration = {
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
62
|
+
'provider' => 'SoarAuthenticationToken::RemoteTokenValidator',
|
63
|
+
'validator-url' => 'http://authentication-token-validator-service:9393/validate',
|
64
|
+
'authentication_token' => {
|
65
|
+
'provider' => auth_provider,
|
66
|
+
'header_name' => 'HTTP_AUTHORIZATION',
|
67
|
+
'cookie_name' => 'kh2.auth'
|
68
|
+
}
|
67
69
|
}
|
68
70
|
@iut = SoarAuthenticationToken::RackMiddleware.new(@test_app, @iut_configuration, "test-service", nil)
|
69
71
|
end
|
@@ -87,9 +89,9 @@ describe SoarAuthenticationToken::RackMiddleware do
|
|
87
89
|
it "return with 401" do
|
88
90
|
stub_response_body = {'status' => 'success', 'data' => { 'token_validity' => false, 'token_meta' => nil, 'notifications' => ['none'] }}.to_json
|
89
91
|
stub_request(:post, "http://authentication-token-validator-service:9393/validate?flow_identifier").
|
90
|
-
|
91
|
-
|
92
|
-
|
92
|
+
with(body: "{\"authentication_token\":null,\"request_information\":{\"source_address\":\"1.1.1.1\",\"user_agent\":null,\"service\":\"test-service\",\"resource\":\"/\",\"method\":\"GET\",\"base_url\":\"http://service\",\"version\":\"#{version}\"}}",
|
93
|
+
headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
94
|
+
to_return(status: 200, body: stub_response_body, headers: {})
|
93
95
|
|
94
96
|
opts = { 'REMOTE_ADDR' => '1.1.1.1', 'HTTP_AUTHORIZATION' => nil }
|
95
97
|
code, env, body = @iut.call Rack::MockRequest.env_for('http://service', opts)
|
@@ -101,9 +103,9 @@ describe SoarAuthenticationToken::RackMiddleware do
|
|
101
103
|
it "return with 401" do
|
102
104
|
stub_response_body = {'status' => 'success', 'data' => { 'token_validity' => false, 'token_meta' => nil, 'notifications' => ['none'] }}.to_json
|
103
105
|
stub_request(:post, "http://authentication-token-validator-service:9393/validate?flow_identifier").
|
104
|
-
|
105
|
-
|
106
|
-
|
106
|
+
with(body: "{\"authentication_token\":\"bad_token\",\"request_information\":{\"source_address\":\"1.1.1.1\",\"user_agent\":null,\"service\":\"test-service\",\"resource\":\"/\",\"method\":\"GET\",\"base_url\":\"http://service\",\"version\":\"#{version}\"}}",
|
107
|
+
headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
108
|
+
to_return(status: 200, body: stub_response_body, headers: {})
|
107
109
|
|
108
110
|
opts = { 'REMOTE_ADDR' => '1.1.1.1', 'HTTP_AUTHORIZATION' => 'bad_token' }
|
109
111
|
code, env, body = @iut.call Rack::MockRequest.env_for('http://service', opts)
|
@@ -113,11 +115,12 @@ describe SoarAuthenticationToken::RackMiddleware do
|
|
113
115
|
|
114
116
|
context 'with a valid authentiation token' do
|
115
117
|
it "pass requests to the application" do
|
118
|
+
skip if auth_provider == 'SoarAuthenticationToken::CookieProvider'
|
116
119
|
stub_response_body = {'status' => 'success', 'data' => { 'token_validity' => true, 'token_meta' => { 'authenticated_identifier' => 'a@b.com' }, 'notifications' => ['none'] }}.to_json
|
117
120
|
stub_request(:post, "http://authentication-token-validator-service:9393/validate?flow_identifier").
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
+
with(body: "{\"authentication_token\":\"valid_token\",\"request_information\":{\"source_address\":\"1.1.1.1\",\"user_agent\":null,\"service\":\"test-service\",\"resource\":\"/\",\"method\":\"GET\",\"base_url\":\"http://service\",\"version\":\"#{version}\"}}",
|
122
|
+
headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
123
|
+
to_return(status: 200, body: stub_response_body, headers: {})
|
121
124
|
|
122
125
|
opts = { 'REMOTE_ADDR' => '1.1.1.1', 'HTTP_AUTHORIZATION' => 'valid_token' }
|
123
126
|
code, env, body = @iut.call Rack::MockRequest.env_for('http://service', opts)
|
@@ -125,11 +128,12 @@ describe SoarAuthenticationToken::RackMiddleware do
|
|
125
128
|
end
|
126
129
|
|
127
130
|
it "populate the 'user' key in the rack session with the authenticated user" do
|
131
|
+
skip if auth_provider == 'SoarAuthenticationToken::CookieProvider'
|
128
132
|
stub_response_body = {'status' => 'success', 'data' => { 'token_validity' => true, 'token_meta' => { 'authenticated_identifier' => 'a@b.com' }, 'notifications' => ['none'] }}.to_json
|
129
133
|
stub_request(:post, "http://authentication-token-validator-service:9393/validate?flow_identifier").
|
130
|
-
|
131
|
-
|
132
|
-
|
134
|
+
with(body: "{\"authentication_token\":\"valid_token\",\"request_information\":{\"source_address\":\"1.1.1.1\",\"user_agent\":null,\"service\":\"test-service\",\"resource\":\"/\",\"method\":\"GET\",\"base_url\":\"http://service\",\"version\":\"#{version}\"}}",
|
135
|
+
headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
136
|
+
to_return(status: 200, body: stub_response_body, headers: {})
|
133
137
|
|
134
138
|
opts = { 'REMOTE_ADDR' => '1.1.1.1', 'HTTP_AUTHORIZATION' => 'valid_token' }
|
135
139
|
code, env, body = @iut.call Rack::MockRequest.env_for('http://service', opts)
|
@@ -137,11 +141,13 @@ describe SoarAuthenticationToken::RackMiddleware do
|
|
137
141
|
end
|
138
142
|
|
139
143
|
it "populate the 'auth_token_meta' key in the rack session with the hash containing the token meta" do
|
144
|
+
skip if auth_provider == 'SoarAuthenticationToken::CookieProvider'
|
145
|
+
|
140
146
|
stub_response_body = {'status' => 'success', 'data' => { 'token_validity' => true, 'token_meta' => { 'authenticated_identifier' => 'a@b.com' }, 'notifications' => ['none'] }}.to_json
|
141
147
|
stub_request(:post, "http://authentication-token-validator-service:9393/validate?flow_identifier").
|
142
|
-
|
143
|
-
|
144
|
-
|
148
|
+
with(body: "{\"authentication_token\":\"valid_token\",\"request_information\":{\"source_address\":\"1.1.1.1\",\"user_agent\":null,\"service\":\"test-service\",\"resource\":\"/\",\"method\":\"GET\",\"base_url\":\"http://service\",\"version\":\"#{version}\"}}",
|
149
|
+
headers: {'Accept'=>'*/*', 'Accept-Encoding'=>'gzip;q=1.0,deflate;q=0.6,identity;q=0.3', 'User-Agent'=>'Ruby'}).
|
150
|
+
to_return(status: 200, body: stub_response_body, headers: {})
|
145
151
|
|
146
152
|
opts = { 'REMOTE_ADDR' => '1.1.1.1', 'HTTP_AUTHORIZATION' => 'valid_token' }
|
147
153
|
code, env, body = @iut.call Rack::MockRequest.env_for('http://service', opts)
|
@@ -149,4 +155,4 @@ describe SoarAuthenticationToken::RackMiddleware do
|
|
149
155
|
end
|
150
156
|
end
|
151
157
|
end
|
152
|
-
end
|
158
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: soar_authentication_token
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 7.1.
|
4
|
+
version: 7.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Barney de Villiers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: soar_xt
|
@@ -295,7 +295,10 @@ files:
|
|
295
295
|
- spec/config_rotator_spec.rb
|
296
296
|
- spec/jwt_token_validator_spec.rb
|
297
297
|
- spec/keypair_generator_spec.rb
|
298
|
-
- spec/rack_middleware/
|
298
|
+
- spec/rack_middleware/authorization_header_provider_spec.rb
|
299
|
+
- spec/rack_middleware/cascade_provider_spec.rb
|
300
|
+
- spec/rack_middleware/cookie_provider_spec.rb
|
301
|
+
- spec/rack_middleware/shared/authentication_provider.rb
|
299
302
|
- spec/remote_token_validator_spec.rb
|
300
303
|
- spec/spec_helper.rb
|
301
304
|
- spec/static_token_validator_spec.rb
|
@@ -321,7 +324,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
321
324
|
version: '0'
|
322
325
|
requirements: []
|
323
326
|
rubyforge_project:
|
324
|
-
rubygems_version: 2.
|
327
|
+
rubygems_version: 2.5.1
|
325
328
|
signing_key:
|
326
329
|
specification_version: 4
|
327
330
|
summary: Client library for Hetzner's authentication token service
|
@@ -329,7 +332,10 @@ test_files:
|
|
329
332
|
- spec/config_rotator_spec.rb
|
330
333
|
- spec/jwt_token_validator_spec.rb
|
331
334
|
- spec/keypair_generator_spec.rb
|
332
|
-
- spec/rack_middleware/
|
335
|
+
- spec/rack_middleware/authorization_header_provider_spec.rb
|
336
|
+
- spec/rack_middleware/cascade_provider_spec.rb
|
337
|
+
- spec/rack_middleware/cookie_provider_spec.rb
|
338
|
+
- spec/rack_middleware/shared/authentication_provider.rb
|
333
339
|
- spec/remote_token_validator_spec.rb
|
334
340
|
- spec/spec_helper.rb
|
335
341
|
- spec/static_token_validator_spec.rb
|