oidc_database.rb 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. # Copyright (C) 2012-2025 Zammad Foundation, https://zammad-foundation.org/
  2. class OmniAuth::Strategies::OidcDatabase < OmniAuth::Strategies::OpenIDConnect
  3. option :name, 'openid_connect'
  4. def self.setup
  5. auth_openid_connect_credentials = Setting.get('auth_openid_connect_credentials') || {}
  6. http_type = Setting.get('http_type')
  7. fqdn = Setting.get('fqdn')
  8. client_options = {
  9. identifier: auth_openid_connect_credentials['identifier'],
  10. redirect_uri: "#{http_type}://#{fqdn}/auth/openid_connect/callback",
  11. }
  12. auth_openid_connect_credentials['scope'] = %i[openid email profile] if auth_openid_connect_credentials['scope'].blank?
  13. auth_openid_connect_credentials['scope'] = auth_openid_connect_credentials['scope'].split.map(&:to_sym) if auth_openid_connect_credentials['scope'].is_a?(String)
  14. auth_openid_connect_credentials.compact_blank.merge(
  15. discovery: true,
  16. response_type: :code,
  17. pkce: ActiveModel::Type::Boolean.new.cast(auth_openid_connect_credentials['pkce']),
  18. client_options:,
  19. )
  20. end
  21. def self.destroy_session(env, session)
  22. session.delete('oidc_id_token')
  23. @_current_user = nil
  24. env['rack.session.options'][:expire_after] = nil
  25. session.destroy
  26. end
  27. def initialize(app, *args, &)
  28. args[0] = self.class.setup
  29. super
  30. end
  31. def decode_logout_token(logout_token)
  32. decode_id_token(logout_token)
  33. end
  34. end