openid_connect 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,11 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- openid_connect (0.3.0)
4
+ openid_connect (0.3.1)
5
5
  activemodel (>= 3)
6
6
  attr_required (>= 0.0.5)
7
7
  json (>= 1.4.3)
8
- json-jwt (>= 0.0.3)
8
+ json-jwt (>= 0.3.0)
9
9
  rack-oauth2 (>= 0.14.2)
10
10
  swd (>= 0.1.2)
11
11
  tzinfo
@@ -15,16 +15,16 @@ PATH
15
15
  GEM
16
16
  remote: http://rubygems.org/
17
17
  specs:
18
- activemodel (3.2.6)
19
- activesupport (= 3.2.6)
18
+ activemodel (3.2.8)
19
+ activesupport (= 3.2.8)
20
20
  builder (~> 3.0.0)
21
- activesupport (3.2.6)
21
+ activesupport (3.2.8)
22
22
  i18n (~> 0.6)
23
23
  multi_json (~> 1.0)
24
- addressable (2.2.8)
24
+ addressable (2.3.2)
25
25
  attr_required (0.0.5)
26
26
  bouncy-castle-java (1.5.0146.1)
27
- builder (3.0.0)
27
+ builder (3.0.3)
28
28
  configatron (2.9.1)
29
29
  yamler (>= 0.1.0)
30
30
  cover_me (1.2.0)
@@ -33,12 +33,13 @@ GEM
33
33
  crack (0.3.1)
34
34
  diff-lcs (1.1.3)
35
35
  hashie (1.2.0)
36
- httpclient (2.2.5)
37
- i18n (0.6.0)
36
+ httpclient (2.2.7)
37
+ i18n (0.6.1)
38
38
  jruby-openssl (0.7.7)
39
39
  bouncy-castle-java (>= 1.5.0146.1)
40
- json (1.7.3)
41
- json-jwt (0.1.0)
40
+ json (1.7.5)
41
+ json (1.7.5-java)
42
+ json-jwt (0.3.0)
42
43
  activesupport (>= 2.3)
43
44
  i18n
44
45
  json (>= 1.4.3)
@@ -51,22 +52,22 @@ GEM
51
52
  multi_json (1.3.6)
52
53
  polyglot (0.3.3)
53
54
  rack (1.4.1)
54
- rack-oauth2 (0.14.4)
55
+ rack-oauth2 (0.14.9)
55
56
  activesupport (>= 2.3)
56
57
  attr_required (>= 0.0.5)
57
58
  httpclient (>= 2.2.0.2)
58
59
  i18n
59
- json (>= 1.4.3)
60
+ multi_json (>= 1.3.6)
60
61
  rack (>= 1.1)
61
62
  rake (0.9.2.2)
62
- rspec (2.10.0)
63
- rspec-core (~> 2.10.0)
64
- rspec-expectations (~> 2.10.0)
65
- rspec-mocks (~> 2.10.0)
66
- rspec-core (2.10.1)
67
- rspec-expectations (2.10.0)
63
+ rspec (2.11.0)
64
+ rspec-core (~> 2.11.0)
65
+ rspec-expectations (~> 2.11.0)
66
+ rspec-mocks (~> 2.11.0)
67
+ rspec-core (2.11.1)
68
+ rspec-expectations (2.11.3)
68
69
  diff-lcs (~> 1.1.3)
69
- rspec-mocks (2.10.1)
70
+ rspec-mocks (2.11.3)
70
71
  swd (0.1.2)
71
72
  activesupport (>= 3)
72
73
  attr_required (>= 0.0.5)
@@ -78,12 +79,12 @@ GEM
78
79
  polyglot (>= 0.3.1)
79
80
  tzinfo (0.3.33)
80
81
  url_safe_base64 (0.2.1)
81
- validate_email (0.1.5)
82
+ validate_email (0.1.6)
82
83
  activemodel (>= 3.0)
83
84
  mail (>= 2.2.5)
84
85
  validate_url (0.2.0)
85
86
  activemodel (>= 3.0.0)
86
- webmock (1.8.7)
87
+ webmock (1.8.11)
87
88
  addressable (>= 2.2.7)
88
89
  crack (>= 0.1.7)
89
90
  yamler (0.1.0)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.1
1
+ 0.3.2
@@ -2,10 +2,13 @@ module OpenIDConnect
2
2
  class ConnectObject
3
3
  include ActiveModel::Validations, AttrRequired, AttrOptional
4
4
 
5
+ attr_accessor :raw_attributes
6
+
5
7
  def initialize(attributes = {})
6
8
  all_attributes.each do |_attr_|
7
9
  self.send :"#{_attr_}=", attributes[_attr_]
8
10
  end
11
+ self.raw_attributes = attributes
9
12
  attr_missing!
10
13
  end
11
14
 
@@ -6,11 +6,11 @@ module OpenIDConnect
6
6
  class InvalidToken < Exception; end
7
7
 
8
8
  attr_required :iss, :user_id, :aud, :exp, :iat
9
- attr_optional :acr, :auth_time, :nonce, :at_hash, :c_hash
9
+ attr_optional :acr, :auth_time, :nonce, :user_jwk, :at_hash, :c_hash
10
10
 
11
11
  def initialize(attributes = {})
12
12
  super
13
- (all_attributes - [:exp, :iat, :auth_time]).each do |key|
13
+ (all_attributes - [:exp, :iat, :auth_time, :user_jwk]).each do |key|
14
14
  self.send "#{key}=", self.send(key).try(:to_s)
15
15
  end
16
16
  end
@@ -26,7 +26,31 @@ module OpenIDConnect
26
26
  include JWTnizable
27
27
  class << self
28
28
  def decode(jwt_string, key)
29
- new JSON::JWT.decode(jwt_string, key)
29
+ if key == :self_issued
30
+ decode_self_issued jwt_string
31
+ else
32
+ new JSON::JWT.decode jwt_string, key
33
+ end
34
+ end
35
+
36
+ def decode_self_issued(jwt_string)
37
+ jwt = JSON::JWT.decode jwt_string, :skip_verification
38
+ jwk = jwt[:user_jwk]
39
+ raise InvalidToken.new('Missing user_jwk') if jwk.blank?
40
+ public_key = JSON::JWK.decode jwk
41
+ user_id_base_string = case public_key
42
+ when OpenSSL::PKey::RSA
43
+ [jwk[:mod], jwk[:exp]].join
44
+ when OpenSSL::PKey::EC
45
+ raise NotImplementedError.new('Not Implemented Yet')
46
+ else
47
+ # Shouldn't reach here. All unknown algorithm error should occurs when decoding JWK
48
+ raise InvalidToken.new('Unknown Algorithm')
49
+ end
50
+ expected_user_id = UrlSafeBase64.encode64 OpenSSL::Digest::SHA256.digest(user_id_base_string)
51
+ raise InvalidToken.new('Invalid user_id') unless jwt[:user_id] == expected_user_id
52
+ jwt.verify public_key
53
+ new jwt
30
54
  end
31
55
  end
32
56
  end
@@ -16,7 +16,7 @@ Gem::Specification.new do |s|
16
16
  s.add_runtime_dependency "activemodel", ">= 3"
17
17
  s.add_runtime_dependency "validate_url"
18
18
  s.add_runtime_dependency "validate_email"
19
- s.add_runtime_dependency "json-jwt", ">= 0.0.3"
19
+ s.add_runtime_dependency "json-jwt", ">= 0.3.0"
20
20
  s.add_runtime_dependency "swd", ">= 0.1.2"
21
21
  s.add_runtime_dependency "rack-oauth2", ">= 0.14.2"
22
22
  s.add_development_dependency "rake", ">= 0.8"
@@ -56,7 +56,7 @@ describe OpenIDConnect::AccessToken do
56
56
  mock_json :get, endpoint, 'errors/invalid_request', :HTTP_AUTHORIZATION => 'Bearer access_token', :status => 400, :params => {
57
57
  :schema => 'openid'
58
58
  } do
59
- expect { request }.should raise_error OpenIDConnect::BadRequest
59
+ expect { request }.to raise_error OpenIDConnect::BadRequest
60
60
  end
61
61
  end
62
62
  end
@@ -66,7 +66,7 @@ describe OpenIDConnect::AccessToken do
66
66
  mock_json :get, endpoint, 'errors/invalid_access_token', :HTTP_AUTHORIZATION => 'Bearer access_token', :status => 401, :params => {
67
67
  :schema => 'openid'
68
68
  } do
69
- expect { request }.should raise_error OpenIDConnect::Unauthorized
69
+ expect { request }.to raise_error OpenIDConnect::Unauthorized
70
70
  end
71
71
  end
72
72
  end
@@ -76,7 +76,7 @@ describe OpenIDConnect::AccessToken do
76
76
  mock_json :get, endpoint, 'errors/insufficient_scope', :HTTP_AUTHORIZATION => 'Bearer access_token', :status => 403, :params => {
77
77
  :schema => 'openid'
78
78
  } do
79
- expect { request }.should raise_error OpenIDConnect::Forbidden
79
+ expect { request }.to raise_error OpenIDConnect::Forbidden
80
80
  end
81
81
  end
82
82
  end
@@ -86,7 +86,7 @@ describe OpenIDConnect::AccessToken do
86
86
  mock_json :get, endpoint, 'errors/unknown', :HTTP_AUTHORIZATION => 'Bearer access_token', :status => 500, :params => {
87
87
  :schema => 'openid'
88
88
  } do
89
- expect { request }.should raise_error OpenIDConnect::HttpError
89
+ expect { request }.to raise_error OpenIDConnect::HttpError
90
90
  end
91
91
  end
92
92
  end
@@ -56,7 +56,7 @@ describe OpenIDConnect::Client::Registrar do
56
56
  it do
57
57
  expect do
58
58
  instance
59
- end.should_not raise_error
59
+ end.not_to raise_error
60
60
  end
61
61
  it { should_not be_valid }
62
62
  end
@@ -69,7 +69,7 @@ describe OpenIDConnect::Client::Registrar do
69
69
  it do
70
70
  expect do
71
71
  instance
72
- end.should raise_error AttrRequired::AttrMissing
72
+ end.to raise_error AttrRequired::AttrMissing
73
73
  end
74
74
  end
75
75
 
@@ -208,7 +208,7 @@ describe OpenIDConnect::Client::Registrar do
208
208
  it do
209
209
  expect do
210
210
  instance.as_json
211
- end.should raise_error OpenIDConnect::ValidationFailed
211
+ end.to raise_error OpenIDConnect::ValidationFailed
212
212
  end
213
213
  end
214
214
  end
@@ -237,7 +237,7 @@ describe OpenIDConnect::Client::Registrar do
237
237
  }, :status => 400 do
238
238
  expect do
239
239
  instance.associate!
240
- end.should raise_error OpenIDConnect::Client::Registrar::RegistrationFailed
240
+ end.to raise_error OpenIDConnect::Client::Registrar::RegistrationFailed
241
241
  end
242
242
  end
243
243
  end
@@ -274,7 +274,7 @@ describe OpenIDConnect::Client::Registrar do
274
274
  }, :status => 400 do
275
275
  expect do
276
276
  instance.update!
277
- end.should raise_error OpenIDConnect::Client::Registrar::RegistrationFailed
277
+ end.to raise_error OpenIDConnect::Client::Registrar::RegistrationFailed
278
278
  end
279
279
  end
280
280
  end
@@ -308,7 +308,7 @@ describe OpenIDConnect::Client::Registrar do
308
308
  it do
309
309
  expect do
310
310
  instance.validate!
311
- end.should_not raise_error OpenIDConnect::ValidationFailed
311
+ end.not_to raise_error OpenIDConnect::ValidationFailed
312
312
  end
313
313
  end
314
314
 
@@ -321,7 +321,7 @@ describe OpenIDConnect::Client::Registrar do
321
321
  it do
322
322
  expect do
323
323
  instance.validate!
324
- end.should raise_error OpenIDConnect::ValidationFailed
324
+ end.to raise_error OpenIDConnect::ValidationFailed
325
325
  end
326
326
  end
327
327
  end
@@ -26,7 +26,7 @@ describe OpenIDConnect::Client do
26
26
  [:authorization_uri, :user_info_uri].each do |endpoint|
27
27
  describe endpoint do
28
28
  it do
29
- expect { client.send endpoint }.should raise_error 'No Host Info'
29
+ expect { client.send endpoint }.to raise_error 'No Host Info'
30
30
  end
31
31
  end
32
32
  end
@@ -109,7 +109,7 @@ describe OpenIDConnect::Client do
109
109
  mock_json :post, client.token_endpoint, 'access_token/invalid_json', :request_header => header_params, :params => protocol_params do
110
110
  expect do
111
111
  access_token
112
- end.should raise_error OpenIDConnect::Exception, 'Unknown Token Type'
112
+ end.to raise_error OpenIDConnect::Exception, 'Unknown Token Type'
113
113
  end
114
114
  end
115
115
  end
@@ -117,7 +117,7 @@ describe OpenIDConnect::Client do
117
117
  context 'otherwise' do
118
118
  it 'should raise Unexpected Token Type exception' do
119
119
  mock_json :post, client.token_endpoint, 'access_token/mac', :request_header => header_params, :params => protocol_params do
120
- expect { access_token }.should raise_error OpenIDConnect::Exception, 'Unexpected Token Type: mac'
120
+ expect { access_token }.to raise_error OpenIDConnect::Exception, 'Unexpected Token Type: mac'
121
121
  end
122
122
  end
123
123
  end
@@ -35,13 +35,13 @@ describe OpenIDConnect::ConnectObject do
35
35
  {:optional => 'Optional'}
36
36
  end
37
37
  it do
38
- expect { klass.new attributes }.should raise_error AttrRequired::AttrMissing
38
+ expect { klass.new attributes }.to raise_error AttrRequired::AttrMissing
39
39
  end
40
40
  end
41
41
 
42
42
  context 'otherwise' do
43
43
  it do
44
- expect { klass.new }.should raise_error AttrRequired::AttrMissing
44
+ expect { klass.new }.to raise_error AttrRequired::AttrMissing
45
45
  end
46
46
  end
47
47
  end
@@ -59,7 +59,7 @@ describe OpenIDConnect::ConnectObject do
59
59
  end
60
60
 
61
61
  it 'should raise OpenIDConnect::ValidationFailed with ActiveModel::Errors owner' do
62
- expect { instance.as_json }.should raise_error(OpenIDConnect::ValidationFailed) { |e|
62
+ expect { instance.as_json }.to raise_error(OpenIDConnect::ValidationFailed) { |e|
63
63
  e.message.should include 'Required is not included in the list'
64
64
  e.message.should include 'Required is too long (maximum is 10 characters)'
65
65
  e.object.errors.should be_a ActiveModel::Errors
@@ -80,7 +80,7 @@ describe OpenIDConnect::ConnectObject do
80
80
  end
81
81
 
82
82
  it 'should raise OpenIDConnect::ValidationFailed with ActiveModel::Errors owner' do
83
- expect { instance.validate! }.should raise_error(OpenIDConnect::ValidationFailed) { |e|
83
+ expect { instance.validate! }.to raise_error(OpenIDConnect::ValidationFailed) { |e|
84
84
  e.message.should include 'Required is not included in the list'
85
85
  e.message.should include 'Required is too long (maximum is 10 characters)'
86
86
  e.object.errors.should be_a ActiveModel::Errors
@@ -37,7 +37,7 @@ describe OpenIDConnect::Discovery::Principal::URI do
37
37
  describe 'error handling' do
38
38
  let(:identifier) { '**' }
39
39
  it do
40
- expect { uri }.should raise_error OpenIDConnect::Discovery::InvalidIdentifier
40
+ expect { uri }.to raise_error OpenIDConnect::Discovery::InvalidIdentifier
41
41
  end
42
42
  end
43
43
  end
@@ -26,7 +26,7 @@ describe OpenIDConnect::Discovery::Principal do
26
26
  context 'when discovery failed' do
27
27
  it do
28
28
  SWD.should_receive(:discover!).and_raise(SWD::Exception)
29
- expect { request }.should raise_error OpenIDConnect::Discovery::DiscoveryFailed
29
+ expect { request }.to raise_error OpenIDConnect::Discovery::DiscoveryFailed
30
30
  end
31
31
  end
32
32
  end
@@ -104,7 +104,7 @@ describe OpenIDConnect::RequestObject do
104
104
  it do
105
105
  expect do
106
106
  request_object.as_json
107
- end.should raise_error OpenIDConnect::ValidationFailed
107
+ end.to raise_error OpenIDConnect::ValidationFailed
108
108
  end
109
109
  end
110
110
  end
@@ -19,7 +19,7 @@ describe OpenIDConnect::ResponseObject::IdToken do
19
19
  describe 'attributes' do
20
20
  subject { klass }
21
21
  its(:required_attributes) { should == [:iss, :user_id, :aud, :exp, :iat] }
22
- its(:optional_attributes) { should == [:acr, :auth_time, :nonce, :at_hash, :c_hash] }
22
+ its(:optional_attributes) { should == [:acr, :auth_time, :nonce, :user_jwk, :at_hash, :c_hash] }
23
23
  end
24
24
 
25
25
  describe '#verify!' do
@@ -39,7 +39,7 @@ describe OpenIDConnect::ResponseObject::IdToken do
39
39
  :issuer => attributes[:iss],
40
40
  :client_id => attributes[:aud]
41
41
  )
42
- end.should raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
42
+ end.to raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
43
43
  end
44
44
  end
45
45
  end
@@ -51,7 +51,7 @@ describe OpenIDConnect::ResponseObject::IdToken do
51
51
  :issuer => 'invalid_issuer',
52
52
  :client_id => attributes[:aud]
53
53
  )
54
- end.should raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
54
+ end.to raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
55
55
  end
56
56
  end
57
57
 
@@ -61,7 +61,7 @@ describe OpenIDConnect::ResponseObject::IdToken do
61
61
  id_token.verify!(
62
62
  :client_id => attributes[:aud]
63
63
  )
64
- end.should raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
64
+ end.to raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
65
65
  end
66
66
  end
67
67
 
@@ -72,7 +72,7 @@ describe OpenIDConnect::ResponseObject::IdToken do
72
72
  :issuer => attributes[:iss],
73
73
  :client_id => 'invalid_client'
74
74
  )
75
- end.should raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
75
+ end.to raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
76
76
  end
77
77
  end
78
78
 
@@ -82,7 +82,7 @@ describe OpenIDConnect::ResponseObject::IdToken do
82
82
  id_token.verify!(
83
83
  :issuer => attributes[:iss]
84
84
  )
85
- end.should raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
85
+ end.to raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
86
86
  end
87
87
  end
88
88
 
@@ -107,7 +107,7 @@ describe OpenIDConnect::ResponseObject::IdToken do
107
107
  :client_id => attributes[:aud],
108
108
  :nonce => 'invalid_nonce'
109
109
  )
110
- end.should raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
110
+ end.to raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
111
111
  end
112
112
  end
113
113
 
@@ -118,7 +118,7 @@ describe OpenIDConnect::ResponseObject::IdToken do
118
118
  :issuer => attributes[:iss],
119
119
  :client_id => attributes[:aud]
120
120
  )
121
- end.should raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
121
+ end.to raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken
122
122
  end
123
123
  end
124
124
  end
@@ -157,5 +157,53 @@ describe OpenIDConnect::ResponseObject::IdToken do
157
157
  its(key) { should == attributes[key] }
158
158
  end
159
159
  its(:exp) { should == attributes[:exp].to_i }
160
+
161
+ context 'when self-issued' do
162
+ context 'when valid' do
163
+ let(:self_issued) do
164
+ 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL3NlbGYtaXNzdWVkLm1lIiwidXNlcl9pZCI6IkN5amplQ0trLU9xSS1YcW5GYzduX1pSOG4xaXlLNFlIcXNzNkp1SHlnNkUiLCJhdWQiOiJ0YXBpZC50YXBpZGVudGl0eS5jb20iLCJleHAiOjEzNDkyNDc3ODAsImlhdCI6MTM0OTI0NDE4MCwidXNlcl9qd2siOnsiYWxnIjoiUlNBIiwibW9kIjoibWtra29uTXZuQkxiWkRCZE9lNkM3Ukk3T2xLbjVZazl0eTBSQ0NFa2E5TkVDVVhWRmJqaHdrVjlNeFpSekQ2Q3ZIZDQzUmU5ak5iRFFVQVloNm1peHZtdFFSODlDUFlMeWNvOXIzTlEySXpEZmVPZjlUbFpMUXhpOG9FSVBOeURyN1FoSHlpUTlBRkd6YUhNLW1DU1hCcTRnM0Z4Nko4U1d0MFBRSERoZV9MN3FURTJHbzA4NGRyZUtXMFZSazhBRkxrM2V3cVlvV0RQRXhjcFlNYWNNSUhnaFd1N0pRSG9xX0xId2hmdnk3cnN2MFh1QTR0ai1oNnhvaDhubUR6MjBfdUc5Wm9MZHJ0cE44ZHF1MTdOTDgwTmQ1cVotaHRwVUpSemUzVzdyN3F4Y0dwNEtzQnRhc0NqWlcyWGlyQlZ1eXU2bDNqc3JnTlB2S1NaZ2NpUGdRIiwiZXhwIjoiQVFBQiJ9fQ.gp7Yr3mT3oneZusYMOKB3_777QwJNrQlqiK4x7HpYreuPNbBYHOKo8Jsmqe8gCnrWcOtGHe2Flt1NvN_Yy-7TgVP9L8XyaM9KnWrVEPVCDlf2tIqIAd6MSOfWtiDsA--a7AHfg7o2HcxH3-V3JXS3LQJnzpKBHuaJJIYwj1_8W9sUXwljqNCmnCytrqkmIWocQazoAy5mvmUcpcTWGnSsiibQGk_eQTRjZaiouDDbHWi87IneVQ7UeuurPIYoVK6PWhj0894zcJEyJFWkf2UshgP1grGVO8FC6dvlF5dayt6aUYeGMrTEV8KL6FNYAB9dZKR7xDC4uOjumHTjvQFfA'
165
+ end
166
+
167
+ context 'when key == :self_issued' do
168
+ it do
169
+ expect do
170
+ klass.decode self_issued, :self_issued
171
+ end.not_to raise_error
172
+ end
173
+ end
174
+
175
+ context 'when key == public_key' do
176
+ it do
177
+ expect do
178
+ klass.decode self_issued, public_key
179
+ end.to raise_error JSON::JWS::VerificationFailed
180
+ end
181
+ end
182
+ end
183
+
184
+ context 'when invalid user_id' do
185
+ let(:self_issued) do
186
+ 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL3NlbGYtaXNzdWVkLm1lIiwidXNlcl9pZCI6ImludmFsaWRfdXNlcl9pZCIsImF1ZCI6InRhcGlkLnRhcGlkZW50aXR5LmNvbSIsImV4cCI6MTM0OTI0ODgxOCwiaWF0IjoxMzQ5MjQ1MjE4LCJ1c2VyX2p3ayI6eyJhbGciOiJSU0EiLCJtb2QiOiJta2trb25Ndm5CTGJaREJkT2U2QzdSSTdPbEtuNVlrOXR5MFJDQ0VrYTlORUNVWFZGYmpod2tWOU14WlJ6RDZDdkhkNDNSZTlqTmJEUVVBWWg2bWl4dm10UVI4OUNQWUx5Y285cjNOUTJJekRmZU9mOVRsWkxReGk4b0VJUE55RHI3UWhIeWlROUFGR3phSE0tbUNTWEJxNGczRng2SjhTV3QwUFFIRGhlX0w3cVRFMkdvMDg0ZHJlS1cwVlJrOEFGTGszZXdxWW9XRFBFeGNwWU1hY01JSGdoV3U3SlFIb3FfTEh3aGZ2eTdyc3YwWHVBNHRqLWg2eG9oOG5tRHoyMF91Rzlab0xkcnRwTjhkcXUxN05MODBOZDVxWi1odHBVSlJ6ZTNXN3I3cXhjR3A0S3NCdGFzQ2paVzJYaXJCVnV5dTZsM2pzcmdOUHZLU1pnY2lQZ1EiLCJleHAiOiJBUUFCIn19.JTIAhIrjbI5s4-1QelTveJYqFjHz2vMQrkRo---TLtSkSDL4IaBXxXabQm_hgXR_Rh80GV2nAD9BR7PSdH2v4BK-xBzHnVzOIfWGzbB-fySvwEF3AO0cQpy8v95no6R8cbVF6exzVmuC5kLesS3BCjoHjywl-fS1H9fUMhUwDS6OatVg4AC3guz0_9l-cM1JE4Ryko-zLAzAkE8cfvVYyH0UCHAQUcTd2T45JmW4_hzN37ziuTs-xKkQ4fZ6TLURS_Q0sxX2vNIhdP1QQWzBwHwxObFK1O_Zb00KVe7MCB7Uxfisz1FDlFgq0Z0QCrQHuVyFqHqcJQjvPh3ORv0_6g'
187
+ end
188
+
189
+ it do
190
+ expect do
191
+ klass.decode self_issued, :self_issued
192
+ end.to raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken, 'Invalid user_id'
193
+ end
194
+ end
195
+
196
+ context 'when no user_jwk' do
197
+ let(:self_issued) do
198
+ 'eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpc3MiOiJodHRwczovL3NlbGYtaXNzdWVkLm1lIiwidXNlcl9pZCI6IkN5amplQ0trLU9xSS1YcW5GYzduX1pSOG4xaXlLNFlIcXNzNkp1SHlnNkUiLCJhdWQiOiJ0YXBpZC50YXBpZGVudGl0eS5jb20iLCJleHAiOjEzNDkyNDg5NjAsImlhdCI6MTM0OTI0NTM2MH0.SyXFCTAAB0l29qxnfUxj5G217cQqVhCiPlQDCq_ZZmtZyGqM4eLI-5D2MPZTc905i10sbwKHTeKqwjhYki2pVOuU5n-N9duTlO64kimg8hAnwEJKsil9jvRPb5hCnc-5vRyXaRV3N1zYFurCEZFmVvXCg4ccKbA_viyuhIYtiMQPHOGY-ELFokfwsbEv11hi9d0kt89pfBMlDyEIZiEDYT0fEl-w7e8tPEk99rCzD_jkitTtdXv18_UsgeM2pDaO9G7_8wQYAX4ldHZjXSihKp2DuTY7edZpP4arYIFHPibtPVcKEnpmK-25mk9Ujo6k7N5kqz9SX6isktbE9-3W4Q'
199
+ end
200
+
201
+ it do
202
+ expect do
203
+ klass.decode self_issued, :self_issued
204
+ end.to raise_error OpenIDConnect::ResponseObject::IdToken::InvalidToken, 'Missing user_jwk'
205
+ end
206
+ end
207
+ end
160
208
  end
161
209
  end
@@ -50,7 +50,7 @@ describe Rack::OAuth2::Server::Authorize::Extension::CodeAndIdTokenAndToken do
50
50
  end
51
51
  end
52
52
  it do
53
- expect { response }.should raise_error AttrRequired::AttrMissing, "'access_token', 'code', 'id_token' required."
53
+ expect { response }.to raise_error AttrRequired::AttrMissing, "'access_token', 'code', 'id_token' required."
54
54
  end
55
55
  end
56
56
  end
@@ -47,7 +47,7 @@ describe Rack::OAuth2::Server::Authorize::Extension::CodeAndIdToken do
47
47
  end
48
48
  end
49
49
  it do
50
- expect { response }.should raise_error AttrRequired::AttrMissing, "'id_token' required."
50
+ expect { response }.to raise_error AttrRequired::AttrMissing, "'id_token' required."
51
51
  end
52
52
  end
53
53
  end
@@ -48,7 +48,7 @@ describe Rack::OAuth2::Server::Authorize::Extension::IdTokenAndToken do
48
48
  end
49
49
  end
50
50
  it do
51
- expect { response }.should raise_error AttrRequired::AttrMissing, "'id_token' required."
51
+ expect { response }.to raise_error AttrRequired::AttrMissing, "'id_token' required."
52
52
  end
53
53
  end
54
54
  end
@@ -43,7 +43,7 @@ describe Rack::OAuth2::Server::Authorize::Extension::IdToken do
43
43
  end
44
44
  end
45
45
  it do
46
- expect { response }.should raise_error AttrRequired::AttrMissing, "'id_token' required."
46
+ expect { response }.to raise_error AttrRequired::AttrMissing, "'id_token' required."
47
47
  end
48
48
  end
49
49
  end
@@ -6,7 +6,7 @@ describe Rack::OAuth2::Server::Resource::ErrorWithConnectExt do
6
6
 
7
7
  describe 'invalid_schema!' do
8
8
  it do
9
- expect { request.invalid_schema! }.should raise_error Rack::OAuth2::Server::Resource::BadRequest
9
+ expect { request.invalid_schema! }.to raise_error Rack::OAuth2::Server::Resource::BadRequest
10
10
  end
11
11
  end
12
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openid_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-06 00:00:00.000000000 Z
12
+ date: 2012-10-03 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
@@ -114,7 +114,7 @@ dependencies:
114
114
  requirements:
115
115
  - - ! '>='
116
116
  - !ruby/object:Gem::Version
117
- version: 0.0.3
117
+ version: 0.3.0
118
118
  type: :runtime
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
@@ -122,7 +122,7 @@ dependencies:
122
122
  requirements:
123
123
  - - ! '>='
124
124
  - !ruby/object:Gem::Version
125
- version: 0.0.3
125
+ version: 0.3.0
126
126
  - !ruby/object:Gem::Dependency
127
127
  name: swd
128
128
  requirement: !ruby/object:Gem::Requirement