rack-simple_auth 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -7
- data/README.md +30 -6
- data/lib/rack/simple_auth/hmac.rb +4 -3
- data/lib/rack/simple_auth/version.rb +1 -1
- data/test/rack/simple_auth/hmac_fail_test.rb +3 -3
- data/test/rack/simple_auth/hmac_test.rb +7 -7
- metadata +84 -63
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
5
|
-
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 20e26bae6761147bd84d107005488530f5ecf65e
|
4
|
+
data.tar.gz: 405bff87cf1a3a7b3df20db785529b8ef89f78da
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 66df96dde2d25ccc0bd4ba392fcb9b28b41f6d43b5a2fca3a1c1710d953fa93295f6623b4db0cdb6f0056fa8e774a0cee51f1987d6eb1fc37ab5fc37a148a50c
|
7
|
+
data.tar.gz: a8736e1d82e10b4ac39e41c6adf06831fc448615599e98b145b7ca5ee1945c636289da8648e557fce0e7c422e25104daf35abe5f4939a1a9e6cf07c3a3a2129f
|
data/README.md
CHANGED
@@ -34,10 +34,12 @@ Or install it yourself as:
|
|
34
34
|
|
35
35
|
HMAC should be used for communication between website backend and api server/controller/whatever..
|
36
36
|
|
37
|
-
For usage between Server <-> Client a sniffer could easily extract the signature/public key and
|
38
|
-
the encrypted message which is for now the same for the same request (see TODO implement timestamp)
|
37
|
+
~~For usage between Server <-> Client a sniffer could easily extract the signature/public key and
|
38
|
+
the encrypted message which is for now the same for the same request (see TODO implement timestamp).~~
|
39
39
|
|
40
|
-
With these 2 informations a "secure" backend could be easily seen public
|
40
|
+
~~With these 2 informations a "secure" backend could be easily seen public...~~
|
41
|
+
|
42
|
+
In version 0.0.5 the timestamp has been added to the msg which will be encrypted, also the possibility to configure the allowed delay a request can have has been added.
|
41
43
|
|
42
44
|
Uses Authorization HTTP Header, example:
|
43
45
|
```Authorization: MessageHash:Signature```
|
@@ -54,6 +56,7 @@ config = {
|
|
54
56
|
'DELETE' => 'path',
|
55
57
|
'PUT' => 'path',
|
56
58
|
'PATCH' => 'path'
|
59
|
+
'tolerance' => 2
|
57
60
|
}
|
58
61
|
|
59
62
|
map '/' do
|
@@ -65,6 +68,7 @@ end
|
|
65
68
|
Note: Private Key and Signature should be served by a file which is not checked into git version control.
|
66
69
|
|
67
70
|
|
71
|
+
|
68
72
|
#### Config Hash
|
69
73
|
|
70
74
|
Via the config hash you are able to define the 'data' for each request method.<br />
|
@@ -82,6 +86,19 @@ The Message what will be HMAC encrypted is:
|
|
82
86
|
message = { 'method' => 'GET', 'data' => '/get/user?name=rack' }.to_json
|
83
87
|
```
|
84
88
|
|
89
|
+
In Version 0.0.5 the timestamp has been added to the Message.
|
90
|
+
|
91
|
+
The new Message which will be encrypted looks like this:
|
92
|
+
|
93
|
+
```ruby
|
94
|
+
message = { 'method' => 'GET', 'date' => Time.now.to_i +- delay range, 'data' => '/get/user?name=rack }.to_json
|
95
|
+
```
|
96
|
+
|
97
|
+
The tolerance which is configureable in the config hash sets the possible delay a request could have and still will be authorized.
|
98
|
+
|
99
|
+
Notice: For a set tolerance a Encrypted Message array will be generated and compared with the MessageHash from the AUTH Header
|
100
|
+
|
101
|
+
|
85
102
|
#### Logging
|
86
103
|
|
87
104
|
With the 4th parameter for Rack::SimpleAuth::HMAC you can define a destination where the internal #log method should write to.
|
@@ -96,13 +113,16 @@ It contains following information:
|
|
96
113
|
- The Signature which was expected
|
97
114
|
|
98
115
|
|
116
|
+
|
99
117
|
## TODO
|
100
118
|
|
101
|
-
Add Timestamp to encryption
|
119
|
+
~~Add Timestamp to encryption..~~
|
120
|
+
|
121
|
+
~~For now a sniffer could track a successfull request to the server and extract the HTTP_AUTHORIZATION HEADER for this request.~~
|
122
|
+
|
123
|
+
~~He got the encrypted message for the specific request && signature -> No security anymore...~~
|
102
124
|
|
103
|
-
For now a sniffer could track a successfull request to the server and extract the HTTP_AUTHORIZATION HEADER for this request.
|
104
125
|
|
105
|
-
He got the encrypted message for the specific request && signature -> No security anymore...
|
106
126
|
|
107
127
|
## Contributing
|
108
128
|
|
@@ -116,3 +136,7 @@ He got the encrypted message for the specific request && signature -> No securit
|
|
116
136
|
|
117
137
|
|
118
138
|
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
|
@@ -60,14 +60,15 @@ module Rack
|
|
60
60
|
hash_array = []
|
61
61
|
|
62
62
|
(-(@tolerance)..@tolerance).each do |i|
|
63
|
-
hash_array << OpenSSL::HMAC.hexdigest(OpenSSL::Digest
|
63
|
+
hash_array << OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret, message(request, i))
|
64
64
|
end
|
65
65
|
|
66
66
|
hash_array
|
67
67
|
end
|
68
68
|
|
69
|
-
# Get Message for current Request
|
69
|
+
# Get Message for current Request and delay
|
70
70
|
# @param [Rack::Request] request [current Request]
|
71
|
+
# @param [Fixnum] delay [delay in timestamp format]
|
71
72
|
# @return [Hash] message [message which will be encrypted]
|
72
73
|
def message(request, delay = 0)
|
73
74
|
date = Time.now.to_i + delay
|
@@ -122,7 +123,7 @@ module Rack
|
|
122
123
|
end
|
123
124
|
end
|
124
125
|
|
125
|
-
private :log, :request_data, :message, :valid
|
126
|
+
private :log, :request_data, :message, :valid?, :build_allowed_messages
|
126
127
|
end
|
127
128
|
end
|
128
129
|
end
|
@@ -14,13 +14,13 @@ class HMACFailTest < MiniTest::Unit::TestCase
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def test_fail
|
17
|
-
|
17
|
+
uri = '/'
|
18
18
|
content = { 'method' => 'GET', 'data' => uri }.to_json
|
19
|
-
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest
|
19
|
+
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret, content)
|
20
20
|
|
21
21
|
assert_raises(RuntimeError) { get uri, {}, 'HTTP_AUTHORIZATION' => "#{hash}:#{@signature}" }
|
22
22
|
end
|
23
23
|
|
24
24
|
def teardown
|
25
25
|
end
|
26
|
-
end
|
26
|
+
end
|
@@ -26,7 +26,7 @@ class HMACTest < MiniTest::Unit::TestCase
|
|
26
26
|
def test_get_with_right_auth_header
|
27
27
|
uri = '/'
|
28
28
|
message = { 'method' => 'GET', 'date' => Time.now.to_i, 'data' => uri }.to_json
|
29
|
-
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest
|
29
|
+
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret, message)
|
30
30
|
|
31
31
|
get uri, {}, 'HTTP_AUTHORIZATION' => "#{hash}:#{@signature}"
|
32
32
|
|
@@ -36,7 +36,7 @@ class HMACTest < MiniTest::Unit::TestCase
|
|
36
36
|
def test_get_with_delay_in_tolerance_range
|
37
37
|
uri = '/'
|
38
38
|
message = { 'method' => 'GET', 'date' => Time.now.to_i - 2, 'data' => uri }.to_json
|
39
|
-
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest
|
39
|
+
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret, message)
|
40
40
|
|
41
41
|
get uri, {}, 'HTTP_AUTHORIZATION' => "#{hash}:#{@signature}"
|
42
42
|
|
@@ -46,7 +46,7 @@ class HMACTest < MiniTest::Unit::TestCase
|
|
46
46
|
def test_get_with_too_big_delay
|
47
47
|
uri = '/'
|
48
48
|
message = { 'method' => 'GET', 'date' => Time.now.to_i - 50, 'data' => uri }.to_json
|
49
|
-
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest
|
49
|
+
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret, message)
|
50
50
|
|
51
51
|
get uri, {}, 'HTTP_AUTHORIZATION' => "#{hash}:#{@signature}"
|
52
52
|
|
@@ -61,7 +61,7 @@ class HMACTest < MiniTest::Unit::TestCase
|
|
61
61
|
def test_post_with_right_auth_header
|
62
62
|
params = { 'name' => 'Bensn' }
|
63
63
|
message = { 'method' => 'POST', 'date' => Time.now.to_i, 'data' => params }.to_json
|
64
|
-
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest
|
64
|
+
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret, message)
|
65
65
|
|
66
66
|
post '/', params, 'HTTP_AUTHORIZATION' => "#{hash}:#{@signature}"
|
67
67
|
|
@@ -76,7 +76,7 @@ class HMACTest < MiniTest::Unit::TestCase
|
|
76
76
|
def test_delete_with_right_auth_header
|
77
77
|
uri = '/'
|
78
78
|
message = { 'method' => 'DELETE', 'date' => Time.now.to_i, 'data' => uri }.to_json
|
79
|
-
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest
|
79
|
+
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret, message)
|
80
80
|
|
81
81
|
delete uri, {}, 'HTTP_AUTHORIZATION' => "#{hash}:#{@signature}"
|
82
82
|
|
@@ -91,7 +91,7 @@ class HMACTest < MiniTest::Unit::TestCase
|
|
91
91
|
def test_put_with_right_auth_header
|
92
92
|
uri = '/'
|
93
93
|
message = { 'method' => 'PUT', 'date' => Time.now.to_i, 'data' => uri }.to_json
|
94
|
-
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest
|
94
|
+
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret, message)
|
95
95
|
|
96
96
|
put uri, {}, 'HTTP_AUTHORIZATION' => "#{hash}:#{@signature}"
|
97
97
|
|
@@ -106,7 +106,7 @@ class HMACTest < MiniTest::Unit::TestCase
|
|
106
106
|
def test_patch_with_right_auth_header
|
107
107
|
uri = '/'
|
108
108
|
message = { 'method' => 'PATCH', 'date' => Time.now.to_i, 'data' => uri }.to_json
|
109
|
-
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest
|
109
|
+
hash = OpenSSL::HMAC.hexdigest(OpenSSL::Digest.new('sha256'), @secret, message)
|
110
110
|
|
111
111
|
patch uri, {}, 'HTTP_AUTHORIZATION' => "#{hash}:#{@signature}"
|
112
112
|
|
metadata
CHANGED
@@ -1,75 +1,96 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: rack-simple_auth
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
|
-
authors:
|
6
|
+
authors:
|
7
7
|
- Benny1992
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2014-03-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
15
14
|
name: rack
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
- !ruby/object:Gem::Version
|
22
|
-
version: "0"
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
23
20
|
type: :runtime
|
24
|
-
version_requirements: *id001
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: bundler
|
27
21
|
prerelease: false
|
28
|
-
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version:
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.5'
|
33
34
|
type: :development
|
34
|
-
version_requirements: *id002
|
35
|
-
- !ruby/object:Gem::Dependency
|
36
|
-
name: rake
|
37
35
|
prerelease: false
|
38
|
-
|
39
|
-
requirements:
|
40
|
-
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.5'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
41
48
|
type: :development
|
42
|
-
version_requirements: *id004
|
43
|
-
- !ruby/object:Gem::Dependency
|
44
|
-
name: coveralls
|
45
49
|
prerelease: false
|
46
|
-
|
47
|
-
requirements:
|
48
|
-
-
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: coveralls
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
49
62
|
type: :development
|
50
|
-
version_requirements: *id005
|
51
|
-
- !ruby/object:Gem::Dependency
|
52
|
-
name: rack-test
|
53
63
|
prerelease: false
|
54
|
-
|
55
|
-
requirements:
|
56
|
-
-
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rack-test
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
57
76
|
type: :development
|
58
|
-
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
59
83
|
description: SimpleAuth HMAC authentication
|
60
|
-
email:
|
84
|
+
email:
|
61
85
|
- klotz.benjamin@yahoo.de
|
62
86
|
executables: []
|
63
|
-
|
64
87
|
extensions: []
|
65
|
-
|
66
88
|
extra_rdoc_files: []
|
67
|
-
|
68
|
-
|
69
|
-
- .
|
70
|
-
- .
|
71
|
-
- .
|
72
|
-
- .yardopts
|
89
|
+
files:
|
90
|
+
- ".gitignore"
|
91
|
+
- ".rubocop.yml"
|
92
|
+
- ".travis.yml"
|
93
|
+
- ".yardopts"
|
73
94
|
- Gemfile
|
74
95
|
- LICENSE.txt
|
75
96
|
- MANIFEST
|
@@ -90,28 +111,28 @@ files:
|
|
90
111
|
- test/rack/simple_auth/hmac_test.rb
|
91
112
|
- test/test_helper.rb
|
92
113
|
homepage: http://www.bennyklotz.at
|
93
|
-
licenses:
|
114
|
+
licenses:
|
94
115
|
- MIT
|
95
116
|
metadata: {}
|
96
|
-
|
97
117
|
post_install_message:
|
98
118
|
rdoc_options: []
|
99
|
-
|
100
|
-
require_paths:
|
119
|
+
require_paths:
|
101
120
|
- lib
|
102
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
103
|
-
requirements:
|
104
|
-
-
|
105
|
-
|
106
|
-
|
107
|
-
|
121
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
122
|
+
requirements:
|
123
|
+
- - ">="
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
126
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
108
131
|
requirements: []
|
109
|
-
|
110
132
|
rubyforge_project:
|
111
133
|
rubygems_version: 2.2.2
|
112
134
|
signing_key:
|
113
135
|
specification_version: 4
|
114
136
|
summary: SimpleAuth HMAC authentication
|
115
137
|
test_files: []
|
116
|
-
|
117
138
|
has_rdoc:
|