Zammad: Pregunta de Oauth2

Creado en 7 mar. 2017  ·  22Comentarios  ·  Fuente: zammad/zammad

¡Hola!

Estoy implementando un servicio Oauth2 y quiero iniciar sesión en Zammad usándolo.

Todo funciona bien, pero en el paso en el que Zammad obtiene el token de acceso y debe iniciar sesión como usuario, aparece el siguiente error en los registros:

ERROR -- : Attribute 'login' required!
E, [2017-03-07T10:02:19.751951 #4144] ERROR -- : ["/opt/zammad/app/models/user.rb:833:in `check_login'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:432:in `block in make_lambda'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:164:in `block in halting'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:504:in `block in call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:504:in `each'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:504:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_validation_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validations/callbacks.rb:113:in `run_validations!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activemodel-4.2.7.1/lib/active_model/validations.rb:338:in `valid?'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/validations.rb:58:in `valid?'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/validations.rb:83:in `perform_validations'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/validations.rb:37:in `save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/attribute_methods/dirty.rb:21:in `save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:286:in `block (2 levels) in save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:351:in `block in with_transaction_returning_status'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `block in transaction'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/transaction.rb:184:in `within_new_transaction'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/database_statements.rb:213:in `transaction'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:220:in `transaction'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:348:in `with_transaction_returning_status'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:286:in `block in save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:301:in `rollback_active_record_state!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/transactions.rb:285:in `save'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/persistence.rb:34:in `create'", "/opt/zammad/app/models/user.rb:291:in `create_from_hash!'", "/opt/zammad/app/models/authorization.rb:57:in `create_from_hash'", "/opt/zammad/app/controllers/sessions_controller.rb:145:in `create_omniauth'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/implicit_render.rb:4:in `send_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/base.rb:198:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/rendering.rb:10:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/callbacks.rb:20:in `block in process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:117:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:555:in `block (2 levels) in compile'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:505:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:92:in `__run_callbacks__'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_process_action_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:81:in `run_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/callbacks.rb:19:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/rescue.rb:29:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/instrumentation.rb:32:in `block in process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications.rb:164:in `block in instrument'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications/instrumenter.rb:20:in `instrument'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/notifications.rb:164:in `instrument'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/instrumentation.rb:30:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/params_wrapper.rb:250:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/railties/controller_runtime.rb:18:in `process_action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/abstract_controller/base.rb:137:in `process'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionview-4.2.7.1/lib/action_view/rendering.rb:30:in `process'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal.rb:196:in `dispatch'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal/rack_delegation.rb:13:in `dispatch'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_controller/metal.rb:237:in `block in action'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/routing/route_set.rb:74:in `dispatch'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/routing/route_set.rb:43:in `serve'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/journey/router.rb:43:in `block in serve'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/journey/router.rb:30:in `each'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/journey/router.rb:30:in `serve'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/routing/route_set.rb:817:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:408:in `call_app!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:362:in `callback_phase'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-oauth2-1.4.0/lib/omniauth/strategies/oauth2.rb:75:in `callback_phase'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:227:in `callback_call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:184:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:186:in `call!'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/strategy.rb:164:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/omniauth-1.3.1/lib/omniauth/builder.rb:63:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/etag.rb:24:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/conditionalget.rb:25:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/head.rb:13:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/params_parser.rb:27:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/flash.rb:260:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/session/abstract/id.rb:225:in `context'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/session/abstract/id.rb:220:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/cookies.rb:560:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/query_cache.rb:36:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activerecord-4.2.7.1/lib/active_record/connection_adapters/abstract/connection_pool.rb:653:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/callbacks.rb:29:in `block in call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:88:in `__run_callbacks__'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:778:in `_run_call_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/callbacks.rb:81:in `run_callbacks'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/callbacks.rb:27:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/remote_ip.rb:78:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/show_exceptions.rb:30:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/rack/logger.rb:38:in `call_app'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/rack/logger.rb:20:in `block in call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/tagged_logging.rb:68:in `block in tagged'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/tagged_logging.rb:26:in `tagged'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/tagged_logging.rb:68:in `tagged'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/rack/logger.rb:20:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/request_id.rb:21:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/methodoverride.rb:22:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/runtime.rb:18:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/activesupport-4.2.7.1/lib/active_support/cache/strategy/local_cache_middleware.rb:28:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/actionpack-4.2.7.1/lib/action_dispatch/middleware/static.rb:120:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/sendfile.rb:113:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/engine.rb:518:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/railties-4.2.7.1/lib/rails/application.rb:165:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/rack-1.6.4/lib/rack/content_length.rb:15:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/configuration.rb:225:in `call'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/server.rb:578:in `handle_request'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/server.rb:415:in `process_client'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/server.rb:275:in `block in run'", "/opt/zammad/vendor/bundle/ruby/2.3.0/gems/puma-3.6.0/lib/puma/thread_pool.rb:116:in `block in spawn_thread'"]

No encuentro ninguna documentación sobre cómo zammad obtendría las credenciales de usuario a través de Oauth2.

En cualquier Documentación de Oauth2, la respuesta a la solicitud de token solo debe contener los valores access_token y caduca.

¿Podrías darme una pista?

¡Saludos cordiales desde Austria!

  • David
question

Comentario más útil

¡Hola tios!

Resuelvo mi problema con wso2is cambiando el def raw_info de la siguiente manera:

def raw_info
  <strong i="7">@raw_info</strong> ||= begin
    uri = URI.parse('https://mywso2is/oauth2/userinfo?schema=openid')
    request = Net::HTTP::Get.new(uri)
    request['Authorization'] = 'Bearer ' + access_token.token

    response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
      http.request(request)
    end
    JSON.parse(response.body)
  end
end

Todos 22 comentarios

Zammad no admite el método de inicio de sesión con token de acceso. Necesitamos las credenciales del usuario en la carga útil de respuesta.

Tomado de un boleto (# 102057):
Otros proveedores funcionan de la siguiente manera:

Zammad está configurado para un proveedor de autenticación (por ejemplo, Github). Después de eso, el icono se muestra en la pantalla de inicio de sesión. Después de hacer clic en el icono / enlace, el usuario es redirigido a una URL omniauth. Después de eso, todo hasta recibir las credenciales está fuera del alcance de Zammad y es manejado por omniauth.
Omniauth crea una URL y redirige al usuario con los parámetros OAuth2 requeridos a la página de inicio de sesión correspondiente del proveedor. Allí tiene lugar la autenticación.
Uno de los parámetros de omniauth es la URL de devolución de llamada. Una vez realizada la autenticación, el proveedor redirige al usuario a esta URL. La URL de devolución de llamada está configurada en nuestra lista de rutas:

https://github.com/zammad/zammad/blob/c71b0d36d4fcefdaae4e39f1859094727a3ca74c/config/routes/auth.rb#L5

La ruta canaliza la solicitud al controlador de sesiones, que intenta determinar el usuario o crearlo si no se puede encontrar:

https://github.com/zammad/zammad/blob/c71b0d36d4fcefdaae4e39f1859094727a3ca74c/app/controllers/sessions_controller.rb#L144

Eso se hace aquí:

https://github.com/zammad/zammad/blob/c71b0d36d4fcefdaae4e39f1859094727a3ca74c/app/models/authorization.rb#L54

Zammad necesita estos parámetros y los debe enviar el proveedor. No se admite la autenticación basada en token.

¡Hola!

No entiendo tu respuesta.

Solo intenté:
! Configuración / Seguridad -> Configuración genérica de Oauth2. !

  1. En la página de inicio de sesión, hago clic en OAuth2
  2. Mi navegador me redirige a la URL de autorización establecida en la configuración con los parámetros client_id, client_secret, redirect_uri, response_type y state.
  3. Luego acepto el inicio de sesión usando Oauth y mi proveedor de servicios me redirige al redirect_uri dado con el estado y código de los parámetros. (Este es el código de autorización, ¿verdad?)
  4. Zammad realiza una solicitud en segundo plano a la URL del token desde la configuración con los parámetros client_id, client_secret, code, grant_type, redirect_uri. En este caso, grant_type = authorisation_code, así que devuelvo el access_token.

Este flujo de trabajo es exactamente como debería ser según la documentación.

No entiendo dónde deberíamos establecer los datos de usuario.

  • David

con el estado y código de los parámetros. (Este es el código de autorización, ¿verdad?)

Ese es el punto: Zammad espera una estructura Hash que contenga los datos del usuario, no un código de autenticación. El Hash necesita la siguiente estructura:
https://github.com/zammad/zammad/blob/c71b0d36d4fcefdaae4e39f1859094727a3ca74c/app/models/authorization.rb#L79

Su punto 4. no tuvo lugar. Zammad no realiza ninguna solicitud después de que el inicio de sesión de OAuth se haya realizado correctamente.

Su punto 4. no tuvo lugar. Zammad no realiza ninguna solicitud después de que el inicio de sesión de OAuth se haya realizado correctamente.

¿Pero el punto 4 es la solicitud al TOKEN_URL que ocurre en mis registros?

  • 192.168.4.142 - - [07 / Mar / 2017: 14: 33: 23 +0100] "GET /oauth/authorize?client_id=0815&redirect_uri=http%3A%2F%2Fdomain.tld%2Fauth%2Foauth2%2Fcallback&response_type=b97e53453 HTTP / 1.1 "302840" http: //domain.tld/ "" Mozilla / 5.0 (Windows NT 6.1; Win64; x64) AppleWebKit / 537.36 (KHTML, como Gecko) Chrome / 56.0.2924.87 Safari / 537.36 "
  • 192.168.4.64 - - [07 / Mar / 2017: 14: 33: 23 +0100] "POST / oauth / token HTTP / 1.1" 200216 "-" "Faraday v0.9.2"

Hablo del inicio de sesión del usuario usando oauth2.

response_type=code no es compatible con Zammad

¿Pero este response_type=code lo establece Zammad cuando presiono el botón "Oauth2" en la página de inicio de sesión?
¿Eso no lo establece mi proveedor de Oauth?

🤔 voy a echar un vistazo

Hola @ThePatzen , perdón por la demora. Pasé algún tiempo con la parte del proveedor de OAuth2 y encontré que algunas personas tenían un problema muy similar como usted: # 775

¿También usa el kit de herramientas Django OAuth2? ¿La solución alternativa proporcionada por @firlevapz aquí también funciona para usted?

Esperando poder escuchar de ti.

Hola @thorsteneckel , ¡no hay problema! No, no uso este kit de herramientas. Implementé OAuth2 nativo.

¿Entiendo bien? ¿Esta solución cambia el código zammad para hacer una solicitud separada a / api / users / me para obtener las credenciales del usuario?

Oh ya veo. Sí, eso es exactamente lo que hace. Creo que esa podría ser una forma general de ir si entiendo bien su escenario. Como se indicó en el otro número, intentaremos incluir esto en Zammad. ¿Cubriría su caso si pudiera configurar la URL /api/users/me para su proveedor?

PD: Agradable - implementándolo nativo 🤓

Desde mi punto de vista, el módulo OAuth2 necesita un parámetro de configuración adicional que es la "URL de búsqueda de usuario".

También /vendor/lib/oauth2_database.rb debería cambiarse así:

class Oauth2Database < OmniAuth::Strategies::OAuth2
  option :name, 'oauth2'

  def initialize(app, *args, &block)
    # database lookup
    config  = Setting.get('auth_oauth2_credentials') || {}
    args[0] = config['app_id']
    args[1] = config['app_secret']
    args[2][:client_options] = args[2][:client_options].merge(config.symbolize_keys)
    super
  end

  def callback_url
    full_host + script_name + callback_path
  end

  uid { raw_info['id'] }

  info do
    {
      email: raw_info['email'],
      username: raw_info['username'],
      login: raw_info['email'],
      first_name: raw_info['first_name'],
      last_name: raw_info['last_name'],
    }
  end

  extra do
    {
      'raw_info' => raw_info
    }
  end

  def raw_info
    <strong i="7">@raw_info</strong> ||= access_token.get(config['user_info_url']).parsed
  end

end

¿El código anterior funciona en su caso? ¿Lo has probado? Sería genial resolver su problema y # 775 con una estrategia de autenticación.

¡Hola!

Actualmente estoy fuera de la oficina. ¡Lo probaré mañana y te daré una respuesta tan pronto como lo haya hecho!

¡Codicias de austria!

No te preocupes, estamos aquí 🤓 Saludos a Austria desde Berlín 🚀

¡Hola! ¡De esta manera funciona el inicio de sesión!

! PERO !: ¡Se crea una nueva cuenta de usuario cada vez! ¡No es posible iniciar sesión en una ya existente!

  • editar *: Olvidé el campo de identificación de usuario. ahora todo funciona!

Recomendación:
También recomendaría mejorar la configuración con varios campos:

  • URL para la búsqueda de usuarios
  • Nombre de campo en la respuesta de búsqueda del correo electrónico
  • Nombre de campo en la respuesta de búsqueda del inicio de sesión
  • Nombre de campo en la respuesta de búsqueda del nombre
  • Nombre de campo en la respuesta de búsqueda del apellido
  • Nombre de campo en la respuesta de búsqueda de la identificación de usuario agregada

Recomendaría el siguiente código:
`class Oauth2Database <OmniAuth :: Strategies :: OAuth2
opción: nombre, 'oauth2'

def initialize (aplicación, * args y block)
# búsqueda de base de datos
config = Setting.get ('auth_oauth2_credentials') || {}
args [0] = config ['app_id']
args [1] = config ['app_secret']
args [2] [: client_options] = args [2] [: client_options] .merge (config.symbolize_keys)
súper
fin

def callback_url
full_host + script_name + callback_path
fin

uid {raw_info [config ['user_info_id']]}

información hacer
{
correo electrónico: raw_info [config ['user_info_email']],
nombre de usuario: raw_info [config ['user_info_username']],
inicio de sesión: raw_info [config ['user_info_login']],
first_name: raw_info [config ['user_info_firstname']],
last_name: raw_info [config ['user_info_lastname']],
}
fin

hacer extra
{
'raw_info' => raw_info
}
fin

def raw_info
@raw_info || = access_token.get (config ['user_info_url']). analizado
fin

fin`

Necesitaría los siguientes campos de configuración:

  • user_info_id
  • user_info_email
  • user_info_login
  • user_info_firstname
  • user_info_lastname
  • Saludos desde AT!
    David

¡Bonito! Gracias por la respuesta. Eché otro vistazo al código de Omniauth y al nuestro. ¿Puede verificar si tiene entradas en su tabla de base authorizations datos Authorization.all .

Si no es así, probablemente falte el parámetro uid .

Discutimos el tema y decidimos extender y refactorizar todo el asunto de OAuth2. Esto incluirá la implementación de las configuraciones que recomendó. Sin embargo, esto puede llevar algún tiempo ya que nuestra lista tiene algunas tareas más urgentes. Crearé un problema separado para esto y me referiré a este problema aquí.

¡Hola!

¡Sí, ahora hay una entrada en la tabla de autorizaciones!
¡Para mí ahora todo funciona! (Usando mi código cambiado)

:-) Codicias de Innsbruck, Austria :-)

¡BONITO! ¿Le importaría publicar su solución aquí para que otros puedan beneficiarse de ella / podemos asegurarnos de que nuestra refactorización pueda reemplazar sus personalizaciones?

Saludos a Innsbruck desde Berlín 🤙

¡Hola! ¡Perdón por contestar tarde! Esta es mi solución:

class Oauth2Database < OmniAuth::Strategies::OAuth2
  option :name, 'oauth2'

  def initialize(app, *args, &block)
    # database lookup
    config = Setting.get('auth_oauth2_credentials') || {}
    args[0] = config['app_id']
    args[1] = config['app_secret']
    args[2][:client_options] = args[2][:client_options].merge(config.symbolize_keys)
    super
  end

  def callback_url
    full_host + script_name + callback_path
  end

  uid { raw_info['id'] }

  info do
    {
      email:      raw_info['email'],
      username:   raw_info['username'],
      login:      raw_info['login'],
      first_name: raw_info['firstname'],
      last_name:  raw_info['lastname'],
    }
  end

  extra do
    {
    'raw_info' => raw_info
    }
  end

  def raw_info
    <strong i="6">@raw_info</strong> ||= access_token.get('/api/me').parsed
  end

end

¡Esto debe configurarse como contenido del archivo /vendor/lib/oauth2_database.rb!

Su aplicación debe dar una respuesta como url / api / me con todos los campos usados ​​en "raw_info".

Si hay alguna pregunta de alguien, no dude en preguntar :-)

¡Niiiiice! ¡Gracias @ThePatzen! Volví a formatear el código un poco. Cerrando por ahora. Diviértete con tu nueva y brillante autenticación Zammad OAuth2 🤓

Hola chicos, tengo el mismo problema al usar wso2is como servidor de identidad. No entiendo que la ruta "/ api / me" no responde en zammad, lo mismo para "/ api / users / me" como escribir en el número 775. En zammad solo renspond "/ api / v1 / users / me" pero solo si inicié sesión ... pero en esta sección creo que no he vuelto a iniciar sesión ... ¿Alguien puede ayudarme, por favor?

¡Hola tios!

Resuelvo mi problema con wso2is cambiando el def raw_info de la siguiente manera:

def raw_info
  <strong i="7">@raw_info</strong> ||= begin
    uri = URI.parse('https://mywso2is/oauth2/userinfo?schema=openid')
    request = Net::HTTP::Get.new(uri)
    request['Authorization'] = 'Bearer ' + access_token.token

    response = Net::HTTP.start(uri.hostname, uri.port, req_options) do |http|
      http.request(request)
    end
    JSON.parse(response.body)
  end
end
¿Fue útil esta página
0 / 5 - 0 calificaciones