doorkeeper-openid_connect 1.7.4 → 1.8.1

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
  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