shared-secret-authentication 0.1.5 → 0.1.6
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.
- data/README.rdoc +32 -1
- data/VERSION +1 -1
- data/lib/shared-secret-authentication/hash_signatures.rb +5 -1
- data/shared-secret-authentication.gemspec +25 -27
- data/spec/shared-secret-authentication/hash_signatures_spec.rb +4 -2
- data/spec/spec_helper.rb +1 -0
- metadata +6 -7
- data/.gitignore +0 -23
data/README.rdoc
CHANGED
@@ -1,6 +1,37 @@
|
|
1
1
|
= shared-secret-authentication
|
2
2
|
|
3
|
-
|
3
|
+
The shared secret authentication gem's purpose it to authenticate the communication
|
4
|
+
between to web services using a shared secret. While there are many means to accomplish
|
5
|
+
this the currently implemented approach is to secure the parameters that are passed
|
6
|
+
between the two applications. The parameters are secured by sending the SHA2
|
7
|
+
signature of the parameters plus the shared secret along with the request.
|
8
|
+
The receiving application can then check the signature and if it matches it knows
|
9
|
+
that the request is not only came from an authorized application but that the
|
10
|
+
parameters have not been tampered with either.
|
11
|
+
|
12
|
+
== Setup
|
13
|
+
|
14
|
+
Besides installing the shared-secret-authentication gem the only other required setup
|
15
|
+
is a shared_secret.yml file in the config directory (relative to the root of the
|
16
|
+
project). The yaml file should look like this:
|
17
|
+
|
18
|
+
shared_secret : your_shared_secret
|
19
|
+
|
20
|
+
Once this file is in place you are ready to go.
|
21
|
+
|
22
|
+
== Usage
|
23
|
+
|
24
|
+
To sign a hash simply call <tt>SharedSecretAuthentication.sign_hash(hash)</tt>
|
25
|
+
(hash is the hash you want to sign) and a key of 'signature' with a value of the
|
26
|
+
checksum will be added to the hash. Please note this changes the originally passed
|
27
|
+
in hash.
|
28
|
+
|
29
|
+
On the other side use <tt>SharedSecretAuthentication.hash_signature_correct?(hash)</tt>
|
30
|
+
(hash is the hash you want to check the signature of). True or false is returned if
|
31
|
+
the checksum in 'signature' matches the checksum that is calculated locally.
|
32
|
+
If the passed in hash does not have a key of 'signature' an exception is raised.
|
33
|
+
Also the 'signature' key is deleted during this process.
|
34
|
+
|
4
35
|
|
5
36
|
== Note on Patches/Pull Requests
|
6
37
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.1.
|
1
|
+
0.1.6
|
@@ -20,7 +20,11 @@ module SharedSecretAuthentication
|
|
20
20
|
if value.instance_of? Hash
|
21
21
|
value = value.collect {|k,v|
|
22
22
|
if v.respond_to? :strftime
|
23
|
-
|
23
|
+
if v.respond_to? :utc
|
24
|
+
k.to_s + v.utc.strftime('%a %b %m %H:%M:%S %Y')
|
25
|
+
else
|
26
|
+
k.to_s + v.strftime('%a %b %m %H:%M:%S %Y')
|
27
|
+
end
|
24
28
|
else
|
25
29
|
k.to_s + v.to_s
|
26
30
|
end
|
@@ -1,53 +1,51 @@
|
|
1
1
|
# Generated by jeweler
|
2
2
|
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
-
# Instead, edit Jeweler::Tasks in Rakefile, and run
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{shared-secret-authentication}
|
8
|
-
s.version = "0.1.
|
8
|
+
s.version = "0.1.6"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Josh Moore"]
|
12
|
-
s.date = %q{
|
12
|
+
s.date = %q{2011-01-20}
|
13
13
|
s.description = %q{helper methods to make shared secret authentication easier}
|
14
14
|
s.email = %q{joshsmoore@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
|
17
|
+
"README.rdoc"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
"watchr.rb"
|
21
|
+
"LICENSE",
|
22
|
+
"README.rdoc",
|
23
|
+
"Rakefile",
|
24
|
+
"VERSION",
|
25
|
+
"config/shared_secret.yml",
|
26
|
+
"lib/shared-secret-authentication.rb",
|
27
|
+
"lib/shared-secret-authentication/generator.rb",
|
28
|
+
"lib/shared-secret-authentication/hash_signatures.rb",
|
29
|
+
"lib/shared-secret-authentication/load_secret.rb",
|
30
|
+
"shared-secret-authentication.gemspec",
|
31
|
+
"spec/shared-secret-authentication/generator_spec.rb",
|
32
|
+
"spec/shared-secret-authentication/hash_signatures_spec.rb",
|
33
|
+
"spec/shared-secret-authentication/load_secret_spec.rb",
|
34
|
+
"spec/shared-secret-authentication_spec.rb",
|
35
|
+
"spec/spec.opts",
|
36
|
+
"spec/spec_helper.rb",
|
37
|
+
"watchr.rb"
|
39
38
|
]
|
40
39
|
s.homepage = %q{http://github.com/joshsmoore@gmail.com/shared-secret-authentication}
|
41
|
-
s.rdoc_options = ["--charset=UTF-8"]
|
42
40
|
s.require_paths = ["lib"]
|
43
41
|
s.rubygems_version = %q{1.3.7}
|
44
42
|
s.summary = %q{helper methods to make shared secret authentication easier}
|
45
43
|
s.test_files = [
|
46
44
|
"spec/shared-secret-authentication/generator_spec.rb",
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
45
|
+
"spec/shared-secret-authentication/hash_signatures_spec.rb",
|
46
|
+
"spec/shared-secret-authentication/load_secret_spec.rb",
|
47
|
+
"spec/shared-secret-authentication_spec.rb",
|
48
|
+
"spec/spec_helper.rb"
|
51
49
|
]
|
52
50
|
|
53
51
|
if s.respond_to? :specification_version then
|
@@ -48,16 +48,18 @@ describe SharedSecretAuthentication do
|
|
48
48
|
SharedSecretAuthentication.hash_signature('test' => 'me').should == '95f5e1e8bc0f836d233fd108393d56f3c5532830c3fc29f54bd3a208de9699fd'
|
49
49
|
end
|
50
50
|
|
51
|
-
|
52
51
|
it 'should not matter what order the hash is defined it it should produce the same signature' do
|
53
52
|
SharedSecretAuthentication.hash_signature({'test' => 'me', 'different' => 'order', '1' => '2'}).should == SharedSecretAuthentication.hash_signature({'1' => '2', 'different' => 'order', 'test' => 'me'})
|
54
53
|
end
|
55
54
|
|
56
|
-
|
57
55
|
it 'should work for hash keys that are symbols' do
|
58
56
|
SharedSecretAuthentication.hash_signature(:test => 'me', :key => 'test').should == 'b1a4b3df933590f973f07e6f0a391e95a8423e7b5250973f24e3174d60e8a1ac'
|
59
57
|
end
|
60
58
|
|
59
|
+
it 'should work if the hash is signed in a different time zone' do
|
60
|
+
SharedSecretAuthentication.hash_signature_correct?({'visits' => {'visit_date' => Time.parse('2010-06-04T16:48:46Z'), 'mysql_id' => 1}, 'signature' => "d461a73c904fe4cd55b0eaa7212a89973f3126067bccf97775767575a26a148f"}).should be_true
|
61
|
+
end
|
62
|
+
|
61
63
|
context 'edge cases' do
|
62
64
|
it 'should produce the same signature for both hashes' do
|
63
65
|
hash1 = {"practices"=>{"name"=>"Body Image Physical Therapy & Fitness P.C.", "mysql_updated_at"=>Time.parse("Thu, 03 Jun 2010 19:15:03 UTC +00:00"), "mysql_id"=>79}}
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shared-secret-authentication
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 1
|
9
|
-
-
|
10
|
-
version: 0.1.
|
9
|
+
- 6
|
10
|
+
version: 0.1.6
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Josh Moore
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date:
|
18
|
+
date: 2011-01-20 00:00:00 -10:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -45,7 +45,6 @@ extra_rdoc_files:
|
|
45
45
|
- README.rdoc
|
46
46
|
files:
|
47
47
|
- .document
|
48
|
-
- .gitignore
|
49
48
|
- LICENSE
|
50
49
|
- README.rdoc
|
51
50
|
- Rakefile
|
@@ -68,8 +67,8 @@ homepage: http://github.com/joshsmoore@gmail.com/shared-secret-authentication
|
|
68
67
|
licenses: []
|
69
68
|
|
70
69
|
post_install_message:
|
71
|
-
rdoc_options:
|
72
|
-
|
70
|
+
rdoc_options: []
|
71
|
+
|
73
72
|
require_paths:
|
74
73
|
- lib
|
75
74
|
required_ruby_version: !ruby/object:Gem::Requirement
|