doorkeeper-openid_connect 1.7.4 → 1.8.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1c45a5eaa2846559e44cfc7d7526c18dafaca9bec5bad06eead06983819ad6c
4
- data.tar.gz: 7705035b123d843861e8850854ce9a06d8b4dd4f21f478785aac050509f0e891
3
+ metadata.gz: '09f27d32ffb416432a70412926bdd053ef3c715615d503ea468fe00471e00dc0'
4
+ data.tar.gz: 36c769e0736aba2a90576b9837201b692205bbd4506db709b70e9cd544b7e15f
5
5
  SHA512:
6
- metadata.gz: dec4fdd4c2be0301a8b812c710055fa610567902a023a84c83615edf3390e0ea135cc520de315f18091e165536d0e27553d8a83eddd7f9485f2a2fd926304197
7
- data.tar.gz: 287118857266949e24cb44ca74cc3762277baffe08e010e687b9f5fa886f0d74b1dc328cdce88de887ec3794247a49ddc7abb5fc725c12780fa05c0e292b81e6
6
+ metadata.gz: 9d9a70bf130b96e1f1d51d28781c7d2bab443876c7d2a25f8fa3ab674b5bcc406342e7787f8681fa6ec81ea8223011f48600e2c9b257c774766c522a8e74c1b9
7
+ data.tar.gz: 063e9d61009275044b6b6ff98bfd068a7873d7986e407616c5363aedba127989f48da9ff1fe6489895d6ea62b3db5ed69185557b505d02391dc6f935c3dbbc7b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  ## Unreleased
2
2
 
3
+ - [#] Add here
4
+
5
+ ## v1.8.1 (2022-02-09)
6
+
7
+ - [#153] Fix ArgumentError caused by client credential validation introduced in Doorkeeper 5.5.1 (thanks to @CircumnavigatingFlatEarther)
8
+ - [#161] Fix .well-known/openid-connect issuer (respond to block if provided) (thanks to @fkowal).
9
+ - [#152] Expose oauth-authorization-server in routes (thanks to @mitar)
10
+
11
+ ## v1.8.0 (2021-05-11)
12
+
13
+ No changes from v1.8.0-rc1.
14
+
15
+ ## v1.8.0-rc1 (2021-04-20)
16
+
17
+ ### Upgrading
18
+
19
+ This gem now requires Doorkeeper 5.5 and Ruby 2.5.
20
+
21
+ ### Changes
22
+
23
+ - [#138] Support form_post response mode (thanks to @linhdangduy)
24
+ - [#144] Support block syntax for `issuer` configuration (thanks to @maxxsnake)
25
+ - [#145] Register token flows with the strategy instead of the token class (thanks to @paukul)
26
+
27
+ ## v1.7.5 (2020-12-15)
28
+
29
+ ### Changes
30
+
31
+ - [#126] Add discovery_url_options option for discovery endpoints URL generation (thanks to @phlegx)
32
+
33
+ ### Bugfixes
34
+
35
+ - [#123] Remove reference to ApplicationRecord (thanks to @wheeyls)
36
+ - [#124] Clone doorkeeper.grant_flows array before appending 'refresh_token' (thanks to @davidbasalla)
37
+ - [#129] Avoid to use the config alias while supporting Doorkeeper 5.2 (thanks to @kymmt90)
38
+
3
39
  ## v1.7.4 (2020-07-06)
4
40
 
5
41
  - [#119] Execute end_session_endpoint in the controllers context (thanks to @joeljunstrom)
data/README.md CHANGED
@@ -34,6 +34,7 @@ The following parts of [OpenID Connect Core 1.0](http://openid.net/specs/openid-
34
34
  - [Requesting Claims using Scope Values](http://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims)
35
35
  - [UserInfo Endpoint](http://openid.net/specs/openid-connect-core-1_0.html#UserInfo)
36
36
  - [Normal Claims](http://openid.net/specs/openid-connect-core-1_0.html#NormalClaims)
37
+ - [OAuth 2.0 Form Post Response Mode](https://openid.net/specs/oauth-v2-form-post-response-mode-1_0.html)
37
38
 
38
39
  In addition we also support most of [OpenID Connect Discovery 1.0](http://openid.net/specs/openid-connect-discovery-1_0.html) for automatic configuration discovery.
39
40
 
@@ -103,6 +104,7 @@ The following settings are required in `config/initializers/doorkeeper_openid_co
103
104
 
104
105
  - `issuer`
105
106
  - Identifier for the issuer of the response (i.e. your application URL). The value is a case sensitive URL using the `https` scheme that contains scheme, host, and optionally, port number and path components and no query or fragment components.
107
+ - You can either pass a string value, or a block to generate the issuer dynamically based on the `resource_owner` and `application` or [request](app/controllers/doorkeeper/openid_connect/discovery_controller.rb#L123) passed to the block.
106
108
  - `subject`
107
109
  - Identifier for the resource owner (i.e. the authenticated user). A locally unique and never reassigned identifier within the issuer for the end-user, which is intended to be consumed by the client. The value is a case-sensitive string and must not exceed 255 ASCII characters in length.
108
110
  - The database ID of the user is an acceptable choice if you don't mind leaking that information.
@@ -161,6 +163,35 @@ The following settings are optional:
161
163
  - Used by implementations like https://github.com/IdentityModel/oidc-client-js.
162
164
  - The block is executed in the controller's scope, so you have access to your route helpers.
163
165
 
166
+ - `discovery_url_options`
167
+ - The URL options for every available endpoint to use when generating the endpoint URL in the
168
+ discovery response. Available endpoints: `authorization`, `token`, `revocation`,
169
+ `introspection`, `userinfo`, `jwks`, `webfinger`.
170
+ - This option requires option keys with an available endpoint and
171
+ [URL options](https://api.rubyonrails.org/v6.0.3.3/classes/ActionDispatch/Routing/UrlFor.html#method-i-url_for)
172
+ as value.
173
+ - The default is to use the request host, just like all the other URLs in the discovery response.
174
+ - This is useful when you want endpoints to use a different URL than other requests.
175
+ For example, if your Doorkeeper server is behind a firewall with other servers, you might want
176
+ other servers to use an "internal" URL to communicate with Doorkeeper, but you want to present
177
+ an "external" URL to end-users for authentication requests. Note that this setting does not
178
+ actually change the URL that your Doorkeeper server responds on - that is outside the scope of
179
+ Doorkeeper.
180
+
181
+ ```ruby
182
+ # config/initializers/doorkeeper_openid_connect.rb
183
+ Doorkeeper::OpenidConnect.configure do
184
+ # ...
185
+ discovery_url_options do |request|
186
+ {
187
+ authorization: { host: 'host.example.com' },
188
+ jwks: { protocol: request.ssl? ? :https : :http }
189
+ }
190
+ end
191
+ # ...
192
+ end
193
+ ```
194
+
164
195
  ### Scopes
165
196
 
166
197
  To perform authentication over OpenID Connect, an OAuth client needs to request the `openid` scope. This scope needs to be enabled using either `optional_scopes` in the global Doorkeeper configuration in `config/initializers/doorkeeper.rb`, or by adding it to any OAuth application's `scope` attribute.
@@ -24,21 +24,22 @@ module Doorkeeper
24
24
  def provider_response
25
25
  doorkeeper = ::Doorkeeper.configuration
26
26
  openid_connect = ::Doorkeeper::OpenidConnect.configuration
27
+
27
28
  {
28
- issuer: openid_connect.issuer,
29
- authorization_endpoint: oauth_authorization_url(protocol: protocol),
30
- token_endpoint: oauth_token_url(protocol: protocol),
31
- revocation_endpoint: oauth_revoke_url(protocol: protocol),
32
- introspection_endpoint: oauth_introspect_url(protocol: protocol),
33
- userinfo_endpoint: oauth_userinfo_url(protocol: protocol),
34
- jwks_uri: oauth_discovery_keys_url(protocol: protocol),
29
+ issuer: issuer,
30
+ authorization_endpoint: oauth_authorization_url(authorization_url_options),
31
+ token_endpoint: oauth_token_url(token_url_options),
32
+ revocation_endpoint: oauth_revoke_url(revocation_url_options),
33
+ introspection_endpoint: oauth_introspect_url(introspection_url_options),
34
+ userinfo_endpoint: oauth_userinfo_url(userinfo_url_options),
35
+ jwks_uri: oauth_discovery_keys_url(jwks_url_options),
35
36
  end_session_endpoint: instance_exec(&openid_connect.end_session_endpoint),
36
37
 
37
38
  scopes_supported: doorkeeper.scopes,
38
39
 
39
40
  # TODO: support id_token response type
40
41
  response_types_supported: doorkeeper.authorization_response_types,
41
- response_modes_supported: %w[query fragment],
42
+ response_modes_supported: response_modes_supported(doorkeeper),
42
43
  grant_types_supported: grant_types_supported(doorkeeper),
43
44
 
44
45
  # TODO: look into doorkeeper-jwt_assertion for these
@@ -71,18 +72,22 @@ module Doorkeeper
71
72
  end
72
73
 
73
74
  def grant_types_supported(doorkeeper)
74
- grant_types_supported = doorkeeper.grant_flows
75
+ grant_types_supported = doorkeeper.grant_flows.dup
75
76
  grant_types_supported << 'refresh_token' if doorkeeper.refresh_token_enabled?
76
77
  grant_types_supported
77
78
  end
78
79
 
80
+ def response_modes_supported(doorkeeper)
81
+ doorkeeper.authorization_response_flows.flat_map(&:response_mode_matches).uniq
82
+ end
83
+
79
84
  def webfinger_response
80
85
  {
81
86
  subject: params.require(:resource),
82
87
  links: [
83
88
  {
84
89
  rel: WEBFINGER_RELATION,
85
- href: root_url(protocol: protocol),
90
+ href: root_url(webfinger_url_options),
86
91
  }
87
92
  ]
88
93
  }
@@ -104,6 +109,30 @@ module Doorkeeper
104
109
  def protocol
105
110
  Doorkeeper::OpenidConnect.configuration.protocol.call
106
111
  end
112
+
113
+ def discovery_url_options
114
+ Doorkeeper::OpenidConnect.configuration.discovery_url_options.call(request)
115
+ end
116
+
117
+ def discovery_url_default_options
118
+ {
119
+ protocol: protocol
120
+ }
121
+ end
122
+
123
+ def issuer
124
+ if Doorkeeper::OpenidConnect.configuration.issuer.respond_to?(:call)
125
+ Doorkeeper::OpenidConnect.configuration.issuer.call(request).to_s
126
+ else
127
+ Doorkeeper::OpenidConnect.configuration.issuer
128
+ end
129
+ end
130
+
131
+ %i[authorization token revocation introspection userinfo jwks webfinger].each do |endpoint|
132
+ define_method :"#{endpoint}_url_options" do
133
+ discovery_url_default_options.merge(discovery_url_options[endpoint.to_sym] || {})
134
+ end
135
+ end
107
136
  end
108
137
  end
109
138
  end
@@ -3,7 +3,7 @@
3
3
  module Doorkeeper
4
4
  module OpenidConnect
5
5
  class UserinfoController < ::Doorkeeper::ApplicationController
6
- unless Doorkeeper.config.api_only
6
+ unless Doorkeeper.configuration.api_only
7
7
  skip_before_action :verify_authenticity_token
8
8
  end
9
9
  before_action -> { doorkeeper_authorize! :openid }
@@ -17,19 +17,17 @@ module Doorkeeper
17
17
  true
18
18
  end
19
19
 
20
- def redirect_uri
21
- Authorization::URIBuilder.uri_with_fragment(pre_auth.redirect_uri, redirect_uri_params)
22
- end
23
-
24
- private
25
-
26
- def redirect_uri_params
20
+ def body
27
21
  {
28
22
  expires_in: auth.token.expires_in_seconds,
29
23
  state: pre_auth.state,
30
24
  id_token: id_token.as_jws_token
31
25
  }
32
26
  end
27
+
28
+ def redirect_uri
29
+ Authorization::URIBuilder.uri_with_fragment(pre_auth.redirect_uri, body)
30
+ end
33
31
  end
34
32
  end
35
33
  end
@@ -3,9 +3,7 @@
3
3
  module Doorkeeper
4
4
  module OAuth
5
5
  class IdTokenTokenResponse < IdTokenResponse
6
- private
7
-
8
- def redirect_uri_params
6
+ def body
9
7
  super.merge({
10
8
  access_token: auth.token.token,
11
9
  token_type: auth.token.token_type
@@ -134,6 +134,10 @@ module Doorkeeper
134
134
  option :end_session_endpoint, default: lambda { |*_|
135
135
  nil
136
136
  }
137
+
138
+ option :discovery_url_options, default: lambda { |*_|
139
+ {}
140
+ }
137
141
  end
138
142
  end
139
143
  end
@@ -52,15 +52,16 @@ module Doorkeeper
52
52
  redirect_uri: params[:redirect_uri],
53
53
  response_on_fragment: pre_auth.response_on_fragment?,
54
54
  )
55
- end
55
+ end
56
56
 
57
57
  response.headers.merge!(error_response.headers)
58
58
 
59
- if error_response.redirectable?
60
- render json: error_response.body, status: :found, location: error_response.redirect_uri
61
- else
62
- render json: error_response.body, status: error_response.status
63
- end
59
+ # NOTE: Assign error_response to @authorize_response then use redirect_or_render method that are defined at
60
+ # doorkeeper's authorizations_controller.
61
+ # - https://github.com/doorkeeper-gem/doorkeeper/blob/v5.5.0/app/controllers/doorkeeper/authorizations_controller.rb#L110
62
+ # - https://github.com/doorkeeper-gem/doorkeeper/blob/v5.5.0/app/controllers/doorkeeper/authorizations_controller.rb#L52
63
+ @authorize_response = error_response
64
+ redirect_or_render(@authorize_response)
64
65
  end
65
66
 
66
67
  def handle_oidc_prompt_param!(owner)
@@ -40,7 +40,11 @@ module Doorkeeper
40
40
  private
41
41
 
42
42
  def issuer
43
- Doorkeeper::OpenidConnect.configuration.issuer
43
+ if Doorkeeper::OpenidConnect.configuration.issuer.respond_to?(:call)
44
+ Doorkeeper::OpenidConnect.configuration.issuer.call(@resource_owner, @access_token.application).to_s
45
+ else
46
+ Doorkeeper::OpenidConnect.configuration.issuer
47
+ end
44
48
  end
45
49
 
46
50
  def subject
@@ -6,9 +6,16 @@ module Doorkeeper
6
6
  module PasswordAccessTokenRequest
7
7
  attr_reader :nonce
8
8
 
9
- def initialize(server, client, resource_owner, parameters = {})
10
- super
11
- @nonce = parameters[:nonce]
9
+ if Gem.loaded_specs['doorkeeper'].version >= Gem::Version.create('5.5.1')
10
+ def initialize(server, client, credentials, resource_owner, parameters = {})
11
+ super
12
+ @nonce = parameters[:nonce]
13
+ end
14
+ else
15
+ def initialize(server, client, resource_owner, parameters = {})
16
+ super
17
+ @nonce = parameters[:nonce]
18
+ end
12
19
  end
13
20
 
14
21
  private
@@ -7,27 +7,20 @@ module Doorkeeper
7
7
  attr_reader :nonce
8
8
 
9
9
  def initialize(server, attrs = {}, resource_owner = nil)
10
- if (Doorkeeper::VERSION::MAJOR >= 5 && Doorkeeper::VERSION::MINOR >= 4) ||
11
- Doorkeeper::VERSION::MAJOR >= 6
12
- super
13
- else
14
- super(server, attrs)
15
- end
10
+ super
16
11
  @nonce = attrs[:nonce]
17
12
  end
18
13
 
19
- # This method will be updated when doorkeeper move to version > 5.2.2
20
- # TODO: delete this method and refactor response_on_fragment? method (below) when doorkeeper gem version constrains is > 5.2.2
21
- def error_response
22
- if error == :invalid_request
23
- Doorkeeper::OAuth::InvalidRequestResponse.from_request(self, response_on_fragment: response_on_fragment?)
24
- else
25
- Doorkeeper::OAuth::ErrorResponse.from_request(self, response_on_fragment: response_on_fragment?)
14
+ # NOTE: Auto get default response_mode of specified response_type if response_mode is not
15
+ # yet present. We can delete this method after Doorkeeper's minimize version support it.
16
+ def response_on_fragment?
17
+ return response_mode == 'fragment' if response_mode.present?
18
+
19
+ grant_flow = server.authorization_response_flows.detect do |flow|
20
+ flow.matches_response_type?(response_type)
26
21
  end
27
- end
28
22
 
29
- def response_on_fragment?
30
- Doorkeeper::OpenidConnect::ResponseMode.new(response_type).fragment?
23
+ grant_flow&.default_response_mode == 'fragment'
31
24
  end
32
25
  end
33
26
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Doorkeeper
4
4
  module OpenidConnect
5
- class Request < ApplicationRecord
5
+ class Request < ::ActiveRecord::Base
6
6
  self.table_name = "#{table_name_prefix}oauth_openid_requests#{table_name_suffix}".to_sym
7
7
 
8
8
  validates :access_grant_id, :nonce, presence: true
@@ -62,6 +62,7 @@ module Doorkeeper
62
62
  def discovery_well_known_routes
63
63
  routes.scope path: '.well-known' do
64
64
  routes.get :provider, path: 'openid-configuration'
65
+ routes.get :provider, path: 'oauth-authorization-server'
65
66
  routes.get :webfinger
66
67
  end
67
68
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Doorkeeper
4
4
  module OpenidConnect
5
- VERSION = '1.7.4'
5
+ VERSION = '1.8.1'
6
6
  end
7
7
  end
@@ -16,13 +16,11 @@ require 'doorkeeper/openid_connect/claims_builder'
16
16
  require 'doorkeeper/openid_connect/claims/claim'
17
17
  require 'doorkeeper/openid_connect/claims/normal_claim'
18
18
  require 'doorkeeper/openid_connect/config'
19
- require 'doorkeeper/openid_connect/response_types_config'
20
19
  require 'doorkeeper/openid_connect/engine'
21
20
  require 'doorkeeper/openid_connect/errors'
22
21
  require 'doorkeeper/openid_connect/id_token'
23
22
  require 'doorkeeper/openid_connect/id_token_token'
24
23
  require 'doorkeeper/openid_connect/user_info'
25
- require 'doorkeeper/openid_connect/response_mode'
26
24
  require 'doorkeeper/openid_connect/version'
27
25
 
28
26
  require 'doorkeeper/openid_connect/helpers/controller'
@@ -65,26 +63,22 @@ module Doorkeeper
65
63
  end
66
64
  end
67
65
 
68
- if defined?(::Doorkeeper::GrantFlow)
69
- Doorkeeper::GrantFlow.register(
70
- :id_token,
71
- response_type_matches: 'id_token',
72
- response_type_strategy: Doorkeeper::OpenidConnect::IdToken,
73
- )
66
+ Doorkeeper::GrantFlow.register(
67
+ :id_token,
68
+ response_type_matches: 'id_token',
69
+ response_mode_matches: %w[fragment form_post],
70
+ response_type_strategy: Doorkeeper::Request::IdToken,
71
+ )
74
72
 
75
- Doorkeeper::GrantFlow.register(
76
- 'id_token token',
77
- response_type_matches: 'id_token token',
78
- response_type_strategy: Doorkeeper::OpenidConnect::IdTokenToken,
79
- )
73
+ Doorkeeper::GrantFlow.register(
74
+ 'id_token token',
75
+ response_type_matches: 'id_token token',
76
+ response_mode_matches: %w[fragment form_post],
77
+ response_type_strategy: Doorkeeper::Request::IdTokenToken,
78
+ )
80
79
 
81
- Doorkeeper::GrantFlow.register_alias(
82
- 'implicit_oidc', as: ['implicit', 'id_token', 'id_token token']
83
- )
84
- else
85
- # TODO: drop this and corresponding file when we will set minimal
86
- # required Doorkeeper version to 5.5.
87
- Doorkeeper::Config.prepend OpenidConnect::ResponseTypeConfig
88
- end
80
+ Doorkeeper::GrantFlow.register_alias(
81
+ 'implicit_oidc', as: ['implicit', 'id_token', 'id_token token']
82
+ )
89
83
  end
90
84
  end
@@ -1,7 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  Doorkeeper::OpenidConnect.configure do
4
- issuer 'issuer string'
4
+ issuer do |resource_owner, application|
5
+ 'issuer string'
6
+ end
5
7
 
6
8
  signing_key <<~KEY
7
9
  -----BEGIN RSA PRIVATE KEY-----
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: doorkeeper-openid_connect
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.4
4
+ version: 1.8.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Dengler
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-07-06 00:00:00.000000000 Z
12
+ date: 2022-02-09 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: doorkeeper
@@ -17,20 +17,20 @@ dependencies:
17
17
  requirements:
18
18
  - - ">="
19
19
  - !ruby/object:Gem::Version
20
- version: '5.2'
20
+ version: '5.5'
21
21
  - - "<"
22
22
  - !ruby/object:Gem::Version
23
- version: '5.5'
23
+ version: '5.6'
24
24
  type: :runtime
25
25
  prerelease: false
26
26
  version_requirements: !ruby/object:Gem::Requirement
27
27
  requirements:
28
28
  - - ">="
29
29
  - !ruby/object:Gem::Version
30
- version: '5.2'
30
+ version: '5.5'
31
31
  - - "<"
32
32
  - !ruby/object:Gem::Version
33
- version: '5.5'
33
+ version: '5.6'
34
34
  - !ruby/object:Gem::Dependency
35
35
  name: json-jwt
36
36
  requirement: !ruby/object:Gem::Requirement
@@ -157,8 +157,6 @@ files:
157
157
  - lib/doorkeeper/openid_connect/rails/routes.rb
158
158
  - lib/doorkeeper/openid_connect/rails/routes/mapper.rb
159
159
  - lib/doorkeeper/openid_connect/rails/routes/mapping.rb
160
- - lib/doorkeeper/openid_connect/response_mode.rb
161
- - lib/doorkeeper/openid_connect/response_types_config.rb
162
160
  - lib/doorkeeper/openid_connect/user_info.rb
163
161
  - lib/doorkeeper/openid_connect/version.rb
164
162
  - lib/doorkeeper/request/id_token.rb
@@ -179,14 +177,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
179
177
  requirements:
180
178
  - - ">="
181
179
  - !ruby/object:Gem::Version
182
- version: '2.4'
180
+ version: '2.5'
183
181
  required_rubygems_version: !ruby/object:Gem::Requirement
184
182
  requirements:
185
183
  - - ">="
186
184
  - !ruby/object:Gem::Version
187
185
  version: '0'
188
186
  requirements: []
189
- rubygems_version: 3.0.3
187
+ rubygems_version: 3.0.8
190
188
  signing_key:
191
189
  specification_version: 4
192
190
  summary: OpenID Connect extension for Doorkeeper.
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Doorkeeper
4
- module OpenidConnect
5
- class ResponseMode
6
- attr_reader :type
7
-
8
- def initialize(response_type)
9
- @type = response_type
10
- end
11
-
12
- def fragment?
13
- mode == 'fragment'
14
- end
15
-
16
- def query?
17
- mode == 'query'
18
- end
19
-
20
- def mode
21
- case type
22
- when 'token', 'id_token', 'id_token token'
23
- 'fragment'
24
- else
25
- 'query'
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Doorkeeper
4
- module OpenidConnect
5
- module ResponseTypeConfig
6
- private def calculate_authorization_response_types
7
- types = super
8
- if grant_flows.include? 'implicit_oidc'
9
- types << 'token'
10
- types << 'id_token'
11
- types << 'id_token token'
12
- end
13
- types
14
- end
15
- end
16
- end
17
- end