Class: OmniAuth::Strategies::OpenIDConnect
- Inherits:
-
Object
- Object
- OmniAuth::Strategies::OpenIDConnect
- Extended by:
- Forwardable
- Includes:
- OmniAuth::Strategy
- Defined in:
- lib/omniauth/strategies/openid_connect.rb
Defined Under Namespace
Classes: CallbackError
Constant Summary collapse
- RESPONSE_TYPE_EXCEPTIONS =
{ 'id_token' => { exception_class: OmniAuth::OpenIDConnect::MissingIdTokenError, key: :missing_id_token }.freeze, 'code' => { exception_class: OmniAuth::OpenIDConnect::MissingCodeError, key: :missing_code }.freeze, }.freeze
Instance Method Summary collapse
- #authorization_code ⇒ Object
- #authorize_uri ⇒ Object
- #callback_phase ⇒ Object
- #client ⇒ Object
- #config ⇒ Object
- #end_session_uri ⇒ Object
- #other_phase ⇒ Object
- #public_key ⇒ Object
- #request_phase ⇒ Object
- #uid ⇒ Object
Instance Method Details
#authorization_code ⇒ Object
146 147 148 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 146 def params['code'] end |
#authorize_uri ⇒ Object
158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 158 def client.redirect_uri = redirect_uri opts = { response_type: .response_type, response_mode: .response_mode, scope: .scope, state: new_state, login_hint: params['login_hint'], ui_locales: params['ui_locales'], claims_locales: params['claims_locales'], prompt: .prompt, nonce: (new_nonce if .send_nonce), hd: .hd, acr_values: .acr_values, } client.(opts.reject { |_k, v| v.nil? }) end |
#callback_phase ⇒ Object
108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 108 def callback_phase error = params['error_reason'] || params['error'] error_description = params['error_description'] || params['error_reason'] invalid_state = params['state'].to_s.empty? || params['state'] != stored_state raise CallbackError.new(params['error'], error_description, params['error_uri']) if error raise CallbackError, 'Invalid state parameter' if invalid_state return unless valid_response_type? .issuer = issuer if .issuer.nil? || .issuer.empty? verify_id_token! discover! client.redirect_uri = redirect_uri return id_token_callback_phase if configured_response_type == 'id_token' client. = access_token super rescue CallbackError, ::Rack::OAuth2::Client::Error => e fail!(:invalid_credentials, e) rescue ::Timeout::Error, ::Errno::ETIMEDOUT => e fail!(:timeout, e) rescue ::SocketError => e fail!(:failed_to_connect, e) end |
#client ⇒ Object
94 95 96 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 94 def client @client ||= ::OpenIDConnect::Client.new() end |
#config ⇒ Object
98 99 100 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 98 def config @config ||= ::OpenIDConnect::Discovery::Provider::Config.discover!(.issuer) end |
#end_session_uri ⇒ Object
150 151 152 153 154 155 156 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 150 def end_session_uri return unless end_session_endpoint_is_valid? end_session_uri = URI(.end_session_endpoint) end_session_uri.query = encoded_post_logout_redirect_uri end_session_uri.to_s end |
#other_phase ⇒ Object
137 138 139 140 141 142 143 144 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 137 def other_phase if logout_path_pattern.match?(current_path) .issuer = issuer if .issuer.to_s.empty? discover! return redirect(end_session_uri) if end_session_uri end call_app! end |
#public_key ⇒ Object
176 177 178 179 180 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 176 def public_key return config.jwks if .discovery key_or_secret end |
#request_phase ⇒ Object
102 103 104 105 106 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 102 def request_phase .issuer = issuer if .issuer.to_s.empty? discover! redirect end |
#uid ⇒ Object
59 60 61 62 63 64 |
# File 'lib/omniauth/strategies/openid_connect.rb', line 59 def uid user_info.public_send(.uid_field.to_s) rescue NoMethodError log :warn, "User sub:#{user_info.sub} missing info field: #{.uid_field}" user_info.sub end |