openid_connect 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
- 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
|