Oi!
Estou implementando um serviço Oauth2 e desejo fazer login no Zammad usando-o.
Tudo funciona bem, mas na etapa em que Zammad obtém o token de acesso e deve fazer o login do usuário, recebo o seguinte erro nos logs:
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'"]
Não encontro nenhuma documentação sobre como o zammad buscaria as credenciais do usuário via Oauth2.
Em qualquer documentação Oauth2, a resposta à solicitação de token deve conter apenas os valores access_token e expires.
Você poderia me dar uma dica?
Atenciosamente, da Áustria!
Zammad não oferece suporte ao método de login do Token de Acesso. Precisamos das credenciais do usuário na carga útil da resposta.
Retirado de um tíquete (# 102057):
Outros provedores funcionam da seguinte forma:
Zammad é configurado para um provedor de autenticação (por exemplo, Github). Depois disso, o ícone é mostrado na tela de login. Após clicar no ícone / link, o usuário é redirecionado para uma URL Omniauth. Depois disso, tudo até o recebimento das credenciais está fora do escopo do Zammad e controlado pelo omniauth.
Omniauth cria um URL e redireciona o usuário com os parâmetros OAuth2 necessários para a página de login correspondente do provedor. Aí ocorre a autenticação.
Um dos parâmetros omniauth é o URL de retorno de chamada. Depois que a autenticação é feita, o usuário é redirecionado para esta URL pelo provedor. O URL de retorno de chamada está configurado em nossa lista de rotas:
A rota canaliza a solicitação para o controlador de sessões, que tenta determinar o usuário ou criá-lo se não puder ser encontrado:
Isso é feito aqui:
Esses parâmetros são necessários para a Zammad e devem ser enviados pelo provedor. A autenticação baseada em token não é suportada.
Oi!
Eu não entendo sua resposta.
Eu apenas tentei:
! Configurações / Segurança -> Configuração do Oauth2 genérico. !
Este fluxo de trabalho é exatamente como deveria ser dependendo da documentação.
Eu não entendo, onde devemos definir o userdata.
com o estado e código params. (Este é o código de autorização, certo?)
Esse é o ponto: Zammad espera uma estrutura Hash contendo os dados do usuário, não um código de autenticação. O Hash precisa da seguinte estrutura:
https://github.com/zammad/zammad/blob/c71b0d36d4fcefdaae4e39f1859094727a3ca74c/app/models/authorization.rb#L79
Seu ponto 4. não aconteceu. Zammad não executa nenhuma solicitação depois que um login OAuth foi bem-sucedido.
Seu ponto 4. não aconteceu. Zammad não executa nenhuma solicitação depois que um login OAuth foi bem-sucedido.
Mas o ponto 4 é a solicitação para o TOKEN_URL que acontece nos meus logs?
Falo sobre o login do usuário usando oauth2.
response_type=code
não é compatível com Zammad
Mas este response_type=code
é definido por Zammad quando pressiono o botão "Oauth2" na página de login?
Isso não foi definido pelo meu provedor Oauth ??
🤔 vou dar uma olhada
Olá @ThePatzen - desculpe pela demora. Passei algum tempo com a parte do provedor OAuth2 e descobri que algumas pessoas estão tendo um problema muito semelhante a você: # 775
Você também usa o kit de ferramentas Django OAuth2? A solução alternativa fornecida por @firlevapz aqui funciona para você também?
Ansioso para ouvir de você.
Olá @thorsteneckel - sem problemas! Não, eu não uso este kit de ferramentas. Implementei OAuth2 nativo.
Eu entendo direito. Esta solução alternativa altera o código zammad para fazer uma solicitação separada para / api / users / me para obter as credenciais do usuário.
Oh, eu vejo. Sim, é exatamente isso que faz. Eu acho que essa poderia ser uma maneira geral de você ir se eu entender seu cenário direito. Conforme declarado na outra edição, tentaremos colocar isso no Zammad. O seu caso seria atendido se você pudesse configurar o URL /api/users/me
para o seu provedor?
PS: Legal - implementação nativa 🤓
Do meu ponto de vista, o Módulo OAuth2 precisa de um parâmetro de configuração adicional que é o "URL de pesquisa do usuário".
Além disso, /vendor/lib/oauth2_database.rb deve ser alterado assim:
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
O código acima funciona no seu caso? Você já testou? Seria ótimo resolver seu problema e # 775 com uma estratégia de autenticação.
Oi!
Atualmente estou fora do escritório. Vou testar isso amanhã e dar uma resposta assim que terminar!
Ganância da Áustria!
Não se preocupe - estamos aqui 🤓 Saudações à Áustria de Berlim 🚀
Oi! Assim o login funciona!
! MAS !: Uma nova conta de usuário é criada a cada vez! Não é possível fazer o login em um já existente!
Recomendação:
Eu também recomendaria aprimorar a configuração com vários campos:
Eu recomendaria o seguinte código:
`class Oauth2Database <OmniAuth :: Strategies :: OAuth2
opção: nome, 'oauth2'
def initialize (app, * args, & block)
# pesquisa de banco de dados
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
fim
def callback_url
full_host + script_name + callback_path
fim
uid {raw_info [config ['user_info_id']]}
informação fazer
{
email: raw_info [config ['user_info_email']],
nome de usuário: raw_info [config ['user_info_username']],
login: raw_info [config ['user_info_login']],
first_name: raw_info [config ['user_info_firstname']],
last_name: raw_info [config ['user_info_lastname']],
}
fim
extra fazer
{
'raw_info' => raw_info
}
fim
def raw_info
@raw_info || = access_token.get (config ['user_info_url']). analisado
fim
fim`
Você precisaria dos seguintes campos de configuração:
Agradável! Obrigado pelo feedback. Dei outra olhada no código Omniauth e no nosso. Você pode verificar se há entradas em sua tabela de banco de dados authorizations
? Você pode verificar isso por acesso direto ou pelo console Rails Authorization.all
.
Caso contrário, provavelmente falta o parâmetro uid
.
Discutimos o tópico e decidimos estender e refatorar toda a coisa do OAuth2. Isso incluirá a implementação das configurações que você recomendou. No entanto, isso pode levar algum tempo, pois nossa lista tem algumas tarefas mais urgentes. Vou criar um problema separado para isso e me referir a esse problema aqui então.
Oi!
Sim, agora existe uma entrada na tabela de autorizações!
Para mim agora tudo funciona! (Usando meu código alterado)
:-) Greeds de Innsbruck, Áustria :-)
LEGAIS! Você se importaria de postar sua solução aqui para que outros possam se beneficiar dela / podemos garantir que nossa refatoração seja capaz de substituir suas personalizações?
Saudações de Berlim para Innsbruck 🤙
Oi! Desculpa pelo atraso da minha resposta! Esta é minha solução:
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
Isso deve ser definido como conteúdo do arquivo /vendor/lib/oauth2_database.rb!
Seu aplicativo deve fornecer uma resposta como url / api / me com todos os campos usados em "raw_info".
Se houver alguma pergunta de alguém, sinta-se à vontade para perguntar :-)
Niiiiice! Obrigado @ThePatzen! Reformatei um pouco o código. Fechando por enquanto. Divirta-se com sua nova autenticação Zammad OAuth2 🤓
Olá pessoal, estou com o mesmo problema ao usar wso2is como servidor de identidade. Não entendo o caminho "/ api / me" não responde no zammad, o mesmo para "/ api / users / me", como escrever nas edições 775. No zammad renspond apenas "/ api / v1 / users / me" mas apenas se eu logar ... mas nesta seção eu acho que não estou logado novamente ... Alguém pode me ajudar por favor?
Oi, pessoal!
Eu resolvo meu problema com wso2is alterando o def raw_info da seguinte maneira:
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
Comentários muito úteis
Oi, pessoal!
Eu resolvo meu problema com wso2is alterando o def raw_info da seguinte maneira: