json-jwt 0.0.3 → 0.0.4
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/Gemfile.lock +7 -1
- data/VERSION +1 -1
- data/json-jwt.gemspec +2 -0
- data/lib/json/jws.rb +1 -1
- data/lib/json/jwt.rb +15 -6
- data/spec/json/jws_spec.rb +5 -0
- data/spec/json/jwt_spec.rb +13 -3
- metadata +85 -68
data/Gemfile.lock
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
json-jwt (0.0.
|
|
4
|
+
json-jwt (0.0.3)
|
|
5
|
+
activesupport (>= 2.3)
|
|
6
|
+
i18n
|
|
5
7
|
json (>= 1.4.3)
|
|
6
8
|
url_safe_base64
|
|
7
9
|
|
|
8
10
|
GEM
|
|
9
11
|
remote: http://rubygems.org/
|
|
10
12
|
specs:
|
|
13
|
+
activesupport (3.1.0)
|
|
14
|
+
multi_json (~> 1.0)
|
|
11
15
|
diff-lcs (1.1.3)
|
|
16
|
+
i18n (0.6.0)
|
|
12
17
|
json (1.6.1)
|
|
18
|
+
multi_json (1.0.3)
|
|
13
19
|
rake (0.9.2)
|
|
14
20
|
rcov (0.9.10)
|
|
15
21
|
rspec (2.6.0)
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0.
|
|
1
|
+
0.0.4
|
data/json-jwt.gemspec
CHANGED
|
@@ -12,6 +12,8 @@ Gem::Specification.new do |s|
|
|
|
12
12
|
s.require_paths = ["lib"]
|
|
13
13
|
s.add_runtime_dependency "json", ">= 1.4.3"
|
|
14
14
|
s.add_runtime_dependency "url_safe_base64"
|
|
15
|
+
s.add_runtime_dependency "activesupport", ">= 2.3"
|
|
16
|
+
s.add_runtime_dependency "i18n"
|
|
15
17
|
s.add_development_dependency "rake", ">= 0.8"
|
|
16
18
|
s.add_development_dependency "rcov", ">= 0.9"
|
|
17
19
|
s.add_development_dependency "rspec", ">= 2"
|
data/lib/json/jws.rb
CHANGED
data/lib/json/jwt.rb
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
require 'openssl'
|
|
2
2
|
require 'url_safe_base64'
|
|
3
3
|
require 'json'
|
|
4
|
+
require 'active_support/core_ext'
|
|
4
5
|
|
|
5
6
|
module JSON
|
|
6
7
|
class JWT < Hash
|
|
@@ -27,8 +28,7 @@ module JSON
|
|
|
27
28
|
end
|
|
28
29
|
|
|
29
30
|
def verify(signature_base_string, signature = '', public_key_or_secret = nil)
|
|
30
|
-
|
|
31
|
-
when :none
|
|
31
|
+
if header[:alg].to_s == 'none'
|
|
32
32
|
signature == '' or raise VerificationFailed
|
|
33
33
|
else
|
|
34
34
|
JWS.new(self).verify(signature_base_string, signature, public_key_or_secret)
|
|
@@ -45,15 +45,24 @@ module JSON
|
|
|
45
45
|
end.join('.')
|
|
46
46
|
end
|
|
47
47
|
|
|
48
|
+
def [](key)
|
|
49
|
+
if key.respond_to? :to_sym
|
|
50
|
+
super key.to_sym or
|
|
51
|
+
super key.to_s
|
|
52
|
+
else
|
|
53
|
+
super
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
48
57
|
class << self
|
|
49
58
|
def decode(jwt_string, public_key_or_secret = nil)
|
|
50
59
|
raise InvalidFormat.new('Invalid JWT Format. JWT should include 2 dots.') unless jwt_string.count('.') == 2
|
|
51
|
-
header, claims, signature = jwt_string.split('.').collect do |segment|
|
|
60
|
+
header, claims, signature = jwt_string.split('.', 3).collect do |segment|
|
|
52
61
|
UrlSafeBase64.decode64 segment.to_s
|
|
53
62
|
end
|
|
54
|
-
signature_base_string = jwt_string.split('.')[0,2].join('.')
|
|
63
|
+
signature_base_string = jwt_string.split('.')[0, 2].join('.')
|
|
55
64
|
jwt = new JSON.parse(claims)
|
|
56
|
-
jwt.header = JSON.parse
|
|
65
|
+
jwt.header = JSON.parse(header).with_indifferent_access
|
|
57
66
|
jwt.verify signature_base_string, signature, public_key_or_secret
|
|
58
67
|
jwt
|
|
59
68
|
rescue JSON::ParserError
|
|
@@ -75,4 +84,4 @@ module JSON
|
|
|
75
84
|
end
|
|
76
85
|
|
|
77
86
|
require 'json/jws'
|
|
78
|
-
require 'json/jwe'
|
|
87
|
+
require 'json/jwe'
|
data/spec/json/jws_spec.rb
CHANGED
|
@@ -87,15 +87,20 @@ describe JSON::JWS do
|
|
|
87
87
|
let(:header) { decoded.header }
|
|
88
88
|
it 'should be parsed successfully' do
|
|
89
89
|
header['typ'].should == 'JWT'
|
|
90
|
+
header[:typ].should == 'JWT'
|
|
90
91
|
header['alg'].should == alg.to_s
|
|
92
|
+
header[:alg].should == alg.to_s
|
|
91
93
|
end
|
|
92
94
|
end
|
|
93
95
|
|
|
94
96
|
describe 'claims' do
|
|
95
97
|
it 'should be parsed successfully' do
|
|
96
98
|
decoded['iss'].should == 'joe'
|
|
99
|
+
decoded[:iss].should == 'joe'
|
|
97
100
|
decoded['exp'].should == 1300819380
|
|
101
|
+
decoded[:exp].should == 1300819380
|
|
98
102
|
decoded['http://example.com/is_root'] == true
|
|
103
|
+
decoded[:'http://example.com/is_root'] == true
|
|
99
104
|
end
|
|
100
105
|
end
|
|
101
106
|
end
|
data/spec/json/jwt_spec.rb
CHANGED
|
@@ -41,14 +41,14 @@ describe JSON::JWT do
|
|
|
41
41
|
context 'when not signed nor encrypted' do
|
|
42
42
|
context 'no signature given' do
|
|
43
43
|
it do
|
|
44
|
-
jwt.verify(no_signed
|
|
44
|
+
jwt.verify(no_signed).should be_true
|
|
45
45
|
end
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
context 'otherwise' do
|
|
49
49
|
it do
|
|
50
50
|
expect do
|
|
51
|
-
jwt.verify(no_signed
|
|
51
|
+
jwt.verify(no_signed, 'signature')
|
|
52
52
|
end.should raise_error JSON::JWT::VerificationFailed
|
|
53
53
|
end
|
|
54
54
|
end
|
|
@@ -64,4 +64,14 @@ describe JSON::JWT do
|
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
end
|
|
67
|
-
|
|
67
|
+
|
|
68
|
+
describe '.decode' do
|
|
69
|
+
context 'when not signed nor encrypted' do
|
|
70
|
+
context 'no signature given' do
|
|
71
|
+
it do
|
|
72
|
+
JSON::JWT.decode(no_signed).should == jwt.with_indifferent_access
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
77
|
+
end
|
metadata
CHANGED
|
@@ -1,82 +1,101 @@
|
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: json-jwt
|
|
3
|
-
version: !ruby/object:Gem::Version
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
version: 0.0.4
|
|
4
5
|
prerelease:
|
|
5
|
-
version: 0.0.3
|
|
6
6
|
platform: ruby
|
|
7
|
-
authors:
|
|
7
|
+
authors:
|
|
8
8
|
- nov matake
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- !ruby/object:Gem::Dependency
|
|
12
|
+
date: 2011-12-12 00:00:00.000000000Z
|
|
13
|
+
dependencies:
|
|
14
|
+
- !ruby/object:Gem::Dependency
|
|
16
15
|
name: json
|
|
17
|
-
|
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
|
16
|
+
requirement: &70225743843840 !ruby/object:Gem::Requirement
|
|
19
17
|
none: false
|
|
20
|
-
requirements:
|
|
21
|
-
- -
|
|
22
|
-
- !ruby/object:Gem::Version
|
|
18
|
+
requirements:
|
|
19
|
+
- - ! '>='
|
|
20
|
+
- !ruby/object:Gem::Version
|
|
23
21
|
version: 1.4.3
|
|
24
22
|
type: :runtime
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
prerelease: false
|
|
24
|
+
version_requirements: *70225743843840
|
|
25
|
+
- !ruby/object:Gem::Dependency
|
|
27
26
|
name: url_safe_base64
|
|
27
|
+
requirement: &70225743735080 !ruby/object:Gem::Requirement
|
|
28
|
+
none: false
|
|
29
|
+
requirements:
|
|
30
|
+
- - ! '>='
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: '0'
|
|
33
|
+
type: :runtime
|
|
28
34
|
prerelease: false
|
|
29
|
-
|
|
35
|
+
version_requirements: *70225743735080
|
|
36
|
+
- !ruby/object:Gem::Dependency
|
|
37
|
+
name: activesupport
|
|
38
|
+
requirement: &70225743717540 !ruby/object:Gem::Requirement
|
|
30
39
|
none: false
|
|
31
|
-
requirements:
|
|
32
|
-
- -
|
|
33
|
-
- !ruby/object:Gem::Version
|
|
34
|
-
version:
|
|
40
|
+
requirements:
|
|
41
|
+
- - ! '>='
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
version: '2.3'
|
|
44
|
+
type: :runtime
|
|
45
|
+
prerelease: false
|
|
46
|
+
version_requirements: *70225743717540
|
|
47
|
+
- !ruby/object:Gem::Dependency
|
|
48
|
+
name: i18n
|
|
49
|
+
requirement: &70225743696960 !ruby/object:Gem::Requirement
|
|
50
|
+
none: false
|
|
51
|
+
requirements:
|
|
52
|
+
- - ! '>='
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
35
55
|
type: :runtime
|
|
36
|
-
version_requirements: *id002
|
|
37
|
-
- !ruby/object:Gem::Dependency
|
|
38
|
-
name: rake
|
|
39
56
|
prerelease: false
|
|
40
|
-
|
|
57
|
+
version_requirements: *70225743696960
|
|
58
|
+
- !ruby/object:Gem::Dependency
|
|
59
|
+
name: rake
|
|
60
|
+
requirement: &70225743690140 !ruby/object:Gem::Requirement
|
|
41
61
|
none: false
|
|
42
|
-
requirements:
|
|
43
|
-
- -
|
|
44
|
-
- !ruby/object:Gem::Version
|
|
45
|
-
version:
|
|
62
|
+
requirements:
|
|
63
|
+
- - ! '>='
|
|
64
|
+
- !ruby/object:Gem::Version
|
|
65
|
+
version: '0.8'
|
|
46
66
|
type: :development
|
|
47
|
-
version_requirements: *id003
|
|
48
|
-
- !ruby/object:Gem::Dependency
|
|
49
|
-
name: rcov
|
|
50
67
|
prerelease: false
|
|
51
|
-
|
|
68
|
+
version_requirements: *70225743690140
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: rcov
|
|
71
|
+
requirement: &70225743687880 !ruby/object:Gem::Requirement
|
|
52
72
|
none: false
|
|
53
|
-
requirements:
|
|
54
|
-
- -
|
|
55
|
-
- !ruby/object:Gem::Version
|
|
56
|
-
version:
|
|
73
|
+
requirements:
|
|
74
|
+
- - ! '>='
|
|
75
|
+
- !ruby/object:Gem::Version
|
|
76
|
+
version: '0.9'
|
|
57
77
|
type: :development
|
|
58
|
-
version_requirements: *id004
|
|
59
|
-
- !ruby/object:Gem::Dependency
|
|
60
|
-
name: rspec
|
|
61
78
|
prerelease: false
|
|
62
|
-
|
|
79
|
+
version_requirements: *70225743687880
|
|
80
|
+
- !ruby/object:Gem::Dependency
|
|
81
|
+
name: rspec
|
|
82
|
+
requirement: &70225743683940 !ruby/object:Gem::Requirement
|
|
63
83
|
none: false
|
|
64
|
-
requirements:
|
|
65
|
-
- -
|
|
66
|
-
- !ruby/object:Gem::Version
|
|
67
|
-
version:
|
|
84
|
+
requirements:
|
|
85
|
+
- - ! '>='
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: '2'
|
|
68
88
|
type: :development
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
89
|
+
prerelease: false
|
|
90
|
+
version_requirements: *70225743683940
|
|
91
|
+
description: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption
|
|
92
|
+
and JSON Web Key) in Ruby
|
|
93
|
+
email:
|
|
72
94
|
- nov@matake.jp
|
|
73
95
|
executables: []
|
|
74
|
-
|
|
75
96
|
extensions: []
|
|
76
|
-
|
|
77
97
|
extra_rdoc_files: []
|
|
78
|
-
|
|
79
|
-
files:
|
|
98
|
+
files:
|
|
80
99
|
- .gitignore
|
|
81
100
|
- .rspec
|
|
82
101
|
- .travis.yml
|
|
@@ -98,32 +117,30 @@ files:
|
|
|
98
117
|
- spec/spec_helper.rb
|
|
99
118
|
homepage: https://github.com/nov/json-jwt
|
|
100
119
|
licenses: []
|
|
101
|
-
|
|
102
120
|
post_install_message:
|
|
103
121
|
rdoc_options: []
|
|
104
|
-
|
|
105
|
-
require_paths:
|
|
122
|
+
require_paths:
|
|
106
123
|
- lib
|
|
107
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
|
124
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
108
125
|
none: false
|
|
109
|
-
requirements:
|
|
110
|
-
- -
|
|
111
|
-
- !ruby/object:Gem::Version
|
|
112
|
-
version:
|
|
113
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
126
|
+
requirements:
|
|
127
|
+
- - ! '>='
|
|
128
|
+
- !ruby/object:Gem::Version
|
|
129
|
+
version: '0'
|
|
130
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
114
131
|
none: false
|
|
115
|
-
requirements:
|
|
116
|
-
- -
|
|
117
|
-
- !ruby/object:Gem::Version
|
|
118
|
-
version:
|
|
132
|
+
requirements:
|
|
133
|
+
- - ! '>='
|
|
134
|
+
- !ruby/object:Gem::Version
|
|
135
|
+
version: '0'
|
|
119
136
|
requirements: []
|
|
120
|
-
|
|
121
137
|
rubyforge_project:
|
|
122
|
-
rubygems_version: 1.8.
|
|
138
|
+
rubygems_version: 1.8.12
|
|
123
139
|
signing_key:
|
|
124
140
|
specification_version: 3
|
|
125
|
-
summary: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption and
|
|
126
|
-
|
|
141
|
+
summary: JSON Web Token and its family (JSON Web Signature, JSON Web Encryption and
|
|
142
|
+
JSON Web Key) in Ruby
|
|
143
|
+
test_files:
|
|
127
144
|
- spec/fixtures/rsa/private_key.pem
|
|
128
145
|
- spec/fixtures/rsa/public_key.pem
|
|
129
146
|
- spec/helpers/sign_key_fixture_helper.rb
|