rack-jwt-auth 1.0.3 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bbe873d8ecf67c8398c5de86881ccb16e64b23d8
4
- data.tar.gz: 82d3627695fa803b3c714481f55865e941045d9d
3
+ metadata.gz: a30126acfa855fa96bf9301d4141ab28e0b193a7
4
+ data.tar.gz: 84d54966020a130732a478fb3d6c69281ec1896b
5
5
  SHA512:
6
- metadata.gz: 9177c3e1e77145ba05f565bc23e41ec6a1b594ad28061575b2c714037fb4bd0f8a9b12b5eb5cb9f3c59980ac6b1b74e85f1d66c1ee3b439fb6d03b168170cdfa
7
- data.tar.gz: 65df06c77cbf4f507020418c8ddb8348201937556ea6db17cdf3caecb41f5902cd5ca9b9403cdcc5f3903fb0d8a714ec6d93780bc8e427780309c5f475cf4988
6
+ metadata.gz: d25d8914a8cf610d936cd39d8f37ab36ef44186cb03d2f965aa624933dfffcaaffdac68f92c4ba2ed6e470cb27273d2d7fb3b1b4933acb8259ca4df394a56185
7
+ data.tar.gz: 4de4cfcb04045c6f23dccb5d2edadcc8352bd6964594f4f7745042df2014f2b89761cffbad3dc244b803438b2325c42d1eda3d042cae87d6bef1d0f5ce34b4d5
@@ -4,13 +4,14 @@ module Rack
4
4
 
5
5
  module AuthToken
6
6
 
7
+ # Note: this method is only used by specs
7
8
  def self.issue_token(payload, secret)
8
9
  JWT.encode(payload, secret)
9
10
  end
10
11
 
11
- def self.valid?(token, secret)
12
+ def self.valid?(token, secret, opts = {})
12
13
  begin
13
- JWT.decode(token, secret)
14
+ JWT.decode(token, secret, true, opts)
14
15
  rescue
15
16
  false
16
17
  end
@@ -20,4 +21,4 @@ module Rack
20
21
 
21
22
  end
22
23
  end
23
- end
24
+ end
@@ -4,6 +4,19 @@ module Rack
4
4
 
5
5
  class Authenticate
6
6
 
7
+ DECODE_OPTIONS = Set.new([:algorithm,
8
+ :verify_expiration,
9
+ :verify_not_before,
10
+ :verify_iss,
11
+ :iss,
12
+ :verify_iat,
13
+ :verify_aud,
14
+ :aud,
15
+ :verify_sub,
16
+ :sub,
17
+ :verify_jti,
18
+ :jti]).freeze
19
+
7
20
  def initialize(app, opts = {})
8
21
  @app = app
9
22
  @opts = opts
@@ -33,6 +46,10 @@ module Rack
33
46
  end
34
47
  end
35
48
 
49
+ def extract_decode_options(opts)
50
+ opts.select { |k, _| DECODE_OPTIONS.include?(k) }
51
+ end
52
+
36
53
  def with_authorization(env)
37
54
  if authenticated_route?(env)
38
55
  header = env['HTTP_AUTHORIZATION']
@@ -43,7 +60,7 @@ module Rack
43
60
 
44
61
  return [401, {}, [{message: 'Format is Authorization: Bearer [token]'}.to_json]] unless scheme.match(/^Bearer$/i) && !token.nil?
45
62
 
46
- payload = AuthToken.valid?(token, @secret)
63
+ payload = AuthToken.valid?(token, @secret, extract_decode_options(@opts))
47
64
 
48
65
  return [401, {}, [{message: 'Invalid Authorization'}.to_json]] unless payload
49
66
  end
@@ -1,7 +1,7 @@
1
1
  module Rack
2
2
  module Jwt
3
3
  module Auth
4
- VERSION = "1.0.3"
4
+ VERSION = "1.1.0"
5
5
  end
6
6
  end
7
7
  end
@@ -18,7 +18,7 @@ Gem::Specification.new do |spec|
18
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "jwt", "~> 1.0"
21
+ spec.add_dependency "jwt", ">= 1.5.2"
22
22
 
23
23
  spec.add_development_dependency "bundler", "~> 1.3"
24
24
  spec.add_development_dependency "rake", "~> 10.3"
@@ -28,15 +28,20 @@ describe Rack::Jwt::Auth::AuthToken do
28
28
  expect(data['username']).to eql(data[:username])
29
29
  end
30
30
 
31
+ it 'supports options to verify the token' do
32
+ token = JWT.encode(data, secret, 'HS256')
33
+ payload = subject.valid?(token, secret, { algorithm: 'RS256' })
34
+
35
+ expect(payload).not_to be
36
+ end
37
+
31
38
  it 'checks if the provided token is invalid when decoded with other secret' do
32
39
  token = subject.issue_token(data, secret)
33
40
  payload = subject.valid?(token, 'secret')
34
41
 
35
- meta, data = payload
36
-
37
42
  expect(payload).not_to be
38
43
  end
39
44
 
40
45
  end
41
46
 
42
- end
47
+ end
@@ -116,5 +116,22 @@ describe Rack::Jwt::Auth::Authenticate do
116
116
 
117
117
  end
118
118
 
119
+ context "with options for decode" do
120
+ let(:secret) { 'supertestsecret' }
121
+ let(:app) do
122
+ main_app = lambda { |env| [200, env, ['Hello']] }
123
+ described_class.new(main_app, { secret: secret, algorithm: 'RS256' })
124
+ end
125
+
126
+ it 'calls AuthToken.valid? with decode options' do
127
+ allow(Rack::Jwt::Auth::AuthToken).to receive(:valid?).and_call_original
128
+ token = JWT.encode({user_id: 1, username: 'test'}, secret, 'HS256')
129
+ get('/', {}, {'HTTP_AUTHORIZATION' => "Bearer #{token}"})
130
+
131
+ expect(Rack::Jwt::Auth::AuthToken).to have_received(:valid?)
132
+ .with(token, secret, { algorithm: 'RS256' })
133
+ end
134
+ end
135
+
119
136
 
120
137
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-jwt-auth
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - João Almeida
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-02-05 00:00:00.000000000 Z
11
+ date: 2016-01-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jwt
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
- version: '1.0'
19
+ version: 1.5.2
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - '>='
25
25
  - !ruby/object:Gem::Version
26
- version: '1.0'
26
+ version: 1.5.2
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -121,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
121
  version: '0'
122
122
  requirements: []
123
123
  rubyforge_project:
124
- rubygems_version: 2.0.14
124
+ rubygems_version: 2.2.2
125
125
  signing_key:
126
126
  specification_version: 4
127
127
  summary: Rack jwt auth middleware
@@ -130,4 +130,3 @@ test_files:
130
130
  - spec/authenticate_options_spec.rb
131
131
  - spec/authenticate_spec.rb
132
132
  - spec/spec_helper.rb
133
- has_rdoc: