openid_connect 0.0.9 → 0.0.10
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 +1 -1
- data/VERSION +1 -1
- data/lib/openid_connect.rb +1 -1
- data/lib/openid_connect/access_token.rb +1 -0
- data/lib/openid_connect/client.rb +16 -13
- data/lib/rack/oauth2/server/id_token_response.rb +17 -0
- data/spec/openid_connect/access_token_spec.rb +2 -12
- data/spec/openid_connect/client_spec.rb +2 -2
- data/spec/openid_connect/response_object/user_info/open_id_spec.rb +2 -3
- metadata +2 -2
- data/lib/rack/oauth2/id_token_support.rb +0 -42
data/Gemfile.lock
CHANGED
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.10
|
data/lib/openid_connect.rb
CHANGED
@@ -1,14 +1,11 @@
|
|
1
|
-
require 'rack/oauth2/client/error'
|
2
|
-
require 'rack/oauth2/client/grant'
|
3
|
-
|
4
1
|
module OpenIDConnect
|
5
2
|
class Client < Rack::OAuth2::Client
|
6
|
-
attr_optional :
|
3
|
+
attr_optional :check_session_endpoint, :user_info_endpoint
|
7
4
|
|
8
5
|
def initialize(attributes = {})
|
9
6
|
super
|
10
7
|
@user_info_endpoint ||= '/user_info'
|
11
|
-
@
|
8
|
+
@check_session_endpoint ||= '/id_token'
|
12
9
|
end
|
13
10
|
|
14
11
|
def authorization_uri(params = {})
|
@@ -20,14 +17,8 @@ module OpenIDConnect
|
|
20
17
|
)
|
21
18
|
end
|
22
19
|
|
23
|
-
def
|
24
|
-
|
25
|
-
raise Exception.new("Unexpected Token Type: #{token.token_type}") unless token.token_type == :bearer
|
26
|
-
AccessToken.new token.token_response.merge(:client => self)
|
27
|
-
end
|
28
|
-
|
29
|
-
def introspection_uri
|
30
|
-
absolute_uri_for introspection_endpoint
|
20
|
+
def check_session_uri
|
21
|
+
absolute_uri_for check_session_endpoint
|
31
22
|
end
|
32
23
|
|
33
24
|
def user_info_uri
|
@@ -44,5 +35,17 @@ module OpenIDConnect
|
|
44
35
|
(scopes << 'openid')
|
45
36
|
end.join(' ')
|
46
37
|
end
|
38
|
+
|
39
|
+
def handle_success_response(response)
|
40
|
+
token_hash = JSON.parse(response.body).with_indifferent_access
|
41
|
+
case token_type = token_hash[:token_type].try(:downcase)
|
42
|
+
when 'bearer'
|
43
|
+
AccessToken.new token_hash.merge(:client => self)
|
44
|
+
else
|
45
|
+
raise Exception.new("Unexpected Token Type: #{token_type}")
|
46
|
+
end
|
47
|
+
rescue JSON::ParserError
|
48
|
+
raise Exception.new("Unknown Token Type")
|
49
|
+
end
|
47
50
|
end
|
48
51
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Rack::OAuth2::Server
|
2
|
+
module IdTokenResponse
|
3
|
+
def self.included(klass)
|
4
|
+
klass.send :attr_optional, :id_token
|
5
|
+
klass.class_eval do
|
6
|
+
def protocol_params_with_id_token
|
7
|
+
protocol_params_without_id_token.merge(
|
8
|
+
:id_token => id_token.try(:to_jwt)
|
9
|
+
)
|
10
|
+
end
|
11
|
+
alias_method_chain :protocol_params, :id_token
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
Token::Response.send :include, IdTokenResponse
|
16
|
+
Authorize::Token::Response.send :include, IdTokenResponse
|
17
|
+
end
|
@@ -39,23 +39,13 @@ describe OpenIDConnect::AccessToken do
|
|
39
39
|
)
|
40
40
|
end
|
41
41
|
its(:id_token) { should be_a OpenIDConnect::ResponseObject::IdToken }
|
42
|
-
|
43
|
-
let(:token_response) { access_token.token_response }
|
44
|
-
it 'should stringfy it' do
|
45
|
-
token_response[:id_token].should be_a String
|
46
|
-
end
|
47
|
-
end
|
42
|
+
its(:token_response) { should_not include :id_token }
|
48
43
|
end
|
49
44
|
|
50
45
|
context 'when JWT string' do
|
51
46
|
let(:id_token) { 'id_token' }
|
52
47
|
its(:id_token) { should == 'id_token' }
|
53
|
-
|
54
|
-
let(:token_response) { access_token.token_response }
|
55
|
-
it 'should keep it as is' do
|
56
|
-
token_response[:id_token].should == 'id_token'
|
57
|
-
end
|
58
|
-
end
|
48
|
+
its(:token_response) { should_not include :id_token }
|
59
49
|
end
|
60
50
|
end
|
61
51
|
|
@@ -19,12 +19,12 @@ describe OpenIDConnect::Client do
|
|
19
19
|
end
|
20
20
|
its(:authorization_uri) { should include 'https://server.example.com/oauth2/authorize' }
|
21
21
|
its(:authorization_uri) { should include 'scope=openid' }
|
22
|
-
its(:
|
22
|
+
its(:check_session_uri) { should == 'https://server.example.com/id_token' }
|
23
23
|
its(:user_info_uri) { should == 'https://server.example.com/user_info' }
|
24
24
|
end
|
25
25
|
|
26
26
|
context 'otherwise' do
|
27
|
-
[:authorization_uri, :
|
27
|
+
[:authorization_uri, :check_session_uri, :user_info_uri].each do |endpoint|
|
28
28
|
describe endpoint do
|
29
29
|
it do
|
30
30
|
expect { client.send endpoint }.should raise_error 'No Host Info'
|
@@ -94,8 +94,7 @@ describe OpenIDConnect::ResponseObject::UserInfo::OpenID do
|
|
94
94
|
}
|
95
95
|
}
|
96
96
|
end
|
97
|
-
its(:to_json)
|
98
|
-
|
99
|
-
end
|
97
|
+
its(:to_json) { should include '"id":"http://example.com/nov.matake#12345"'}
|
98
|
+
its(:to_json) { should include '"address":{"formatted":"Tokyo, Japan"}'}
|
100
99
|
end
|
101
100
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: openid_connect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.10
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- nov matake
|
@@ -171,7 +171,7 @@ files:
|
|
171
171
|
- lib/openid_connect/response_object/user_info.rb
|
172
172
|
- lib/openid_connect/response_object/user_info/open_id.rb
|
173
173
|
- lib/openid_connect/response_object/user_info/open_id/address.rb
|
174
|
-
- lib/rack/oauth2/
|
174
|
+
- lib/rack/oauth2/server/id_token_response.rb
|
175
175
|
- openid_connect.gemspec
|
176
176
|
- spec/helpers/webmock_helper.rb
|
177
177
|
- spec/mock_response/access_token/bearer.json
|
@@ -1,42 +0,0 @@
|
|
1
|
-
module Rack::OAuth2
|
2
|
-
module IdTokenSupport
|
3
|
-
def self.included(klass)
|
4
|
-
klass.send :attr_optional, :id_token
|
5
|
-
end
|
6
|
-
|
7
|
-
module AccessTokenExt
|
8
|
-
def self.included(klass)
|
9
|
-
klass.send :include, IdTokenSupport
|
10
|
-
klass.class_eval do
|
11
|
-
def token_response_with_id_token(options = {})
|
12
|
-
token_response_without_id_token.merge(
|
13
|
-
:id_token => if id_token.respond_to?(:to_jwt)
|
14
|
-
id_token.to_jwt
|
15
|
-
else
|
16
|
-
id_token
|
17
|
-
end
|
18
|
-
)
|
19
|
-
end
|
20
|
-
alias_method_chain :token_response, :id_token
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
24
|
-
AccessToken::Bearer.send :include, IdTokenSupport, AccessTokenExt
|
25
|
-
|
26
|
-
module ServerResponseExt
|
27
|
-
def self.included(klass)
|
28
|
-
klass.send :include, IdTokenSupport
|
29
|
-
klass.class_eval do
|
30
|
-
def protocol_params_with_id_token
|
31
|
-
protocol_params_without_id_token.merge(
|
32
|
-
:id_token => id_token.try(:to_jwt)
|
33
|
-
)
|
34
|
-
end
|
35
|
-
alias_method_chain :protocol_params, :id_token
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
Server::Token::Response.send :include, ServerResponseExt
|
40
|
-
Server::Authorize::Token::Response.send :include, ServerResponseExt
|
41
|
-
end
|
42
|
-
end
|