Zammad: Pertanyaan Oauth2

Dibuat pada 7 Mar 2017  ·  22Komentar  ·  Sumber: zammad/zammad

Hai!

Saya menerapkan layanan Oauth2 dan ingin masuk ke Zammad menggunakannya.

Semuanya berfungsi dengan baik tetapi pada langkah di mana Zammad mendapatkan Token Akses dan harus login pengguna saya mendapatkan kesalahan berikut di log:

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'"]

Saya tidak menemukan dokumentasi tentang bagaimana zammad akan mengambil kredensial pengguna melalui Oauth2?

Dalam Dokumentasi Oauth2 apa pun, respons terhadap permintaan-token hanya boleh berisi access_token dan nilai kedaluwarsa.

Bisakah Anda memberi saya petunjuk?

Salam hangat dari austria!

  • David
question

Komentar yang paling membantu

Halo kawan-kawan!

Saya memecahkan masalah saya dengan wso2is mengubah def raw_info sebagai berikut:

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

Semua 22 komentar

Zammad tidak mendukung metode login Access Token. Kami membutuhkan kredensial pengguna dalam payload respons.

Diambil dari tiket (#102057):
Penyedia lain bekerja sebagai berikut:

Zammad dikonfigurasi untuk penyedia auth (misalnya Github). Setelah itu ikon ditampilkan di layar login. Setelah mengklik ikon/tautan, pengguna akan diarahkan ke URL omniauth. Setelah itu semuanya sampai menerima kredensial berada di luar lingkup Zammad dan ditangani oleh omniauth.
Omniauth membuat URL dan mengalihkan pengguna dengan parameter OAuth2 yang diperlukan ke halaman login penyedia yang cocok. Di sana otentikasi terjadi.
Salah satu parameter omniauth adalah URL panggilan balik. Setelah otentikasi selesai, pengguna akan diarahkan ke URL ini oleh penyedia. URL panggilan balik dikonfigurasi dalam daftar rute kami:

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

Rute menyalurkan permintaan ke pengontrol sesi, yang mencoba menentukan pengguna atau membuatnya jika tidak dapat ditemukan:

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

Itu dilakukan di sini:

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

Parameter ini dibutuhkan oleh Zammad dan harus diserahkan oleh penyedia. Otentikasi berbasis token tidak didukung.

Hai!

Saya tidak mengerti tanggapan Anda.

Saya baru saja mencoba:
! Pengaturan / Keamanan -> Penyiapan Oauth2 Generik. !

  1. Pada Halaman Login saya klik OAuth2
  2. Browser saya mengarahkan saya ke url otorisasi sebagaimana diatur dalam konfigurasi dengan params client_id, client_secret, redirect_uri, response_type dan state.
  3. Kemudian saya menerima Login menggunakan Oauth dan penyedia layanan saya mengarahkan saya ke redirect_uri yang diberikan dengan status dan kode params. (Ini adalah kode otorisasi, kan?)
  4. Zammad membuat permintaan di latar belakang ke url token dari konfigurasi dengan params client_id, client_secret, kode, grant_type, redirect_uri. Dalam hal ini grant_type = otorisasi_code jadi saya mengembalikan access_token.

Alur kerja ini persis seperti seharusnya tergantung pada dokumentasi.

Saya tidak mengerti, di mana kita harus mengatur data pengguna.

  • David

dengan status dan kode params. (Ini adalah kode otorisasi, kan?)

Itulah intinya: Zammad mengharapkan struktur Hash yang berisi data pengguna bukan kode auth. Hash membutuhkan struktur berikut:
https://github.com/zammad/zammad/blob/c71b0d36d4fcefdaae4e39f1859094727a3ca74c/app/models/authorization.rb#L79

Poin Anda 4. tidak terjadi. Zammad tidak melakukan permintaan apa pun setelah login OAuth berhasil.

Poin Anda 4. tidak terjadi. Zammad tidak melakukan permintaan apa pun setelah login OAuth berhasil.

Tetapi poin 4 apakah permintaan ke TOKEN_URL yang terjadi di log saya?

  • 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=code&state=6597e53de9acb6fbba75db188416a75db188416a75db188416a HTTP/1.1" 302 840 " http://domain.tld/ " "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, seperti 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" 200 216 "-" "Faraday v0.9.2"

Saya berbicara tentang login pengguna menggunakan oauth2.

response_type=code tidak didukung oleh Zammad

Tapi response_type=code ini di set oleh Zammad ketika saya menekan tombol "Oauth2" di halaman login?
Itu tidak disetel oleh penyedia Oauth saya ??

Saya akan melihat-lihat

Hai @ThePatzen - maaf atas keterlambatannya. Saya menghabiskan beberapa waktu dengan bagian penyedia OAuth2 dan menemukan beberapa orang memiliki masalah yang sangat mirip seperti Anda: #775

Apakah Anda juga menggunakan toolkit Django OAuth2? Apakah solusi yang disediakan oleh @firlevapz di sini juga berfungsi untuk Anda?

Berharap mendengar kabar darimu.

Hai @thorsteneckel - tidak masalah! Tidak, saya tidak menggunakan toolkit ini. Saya menerapkan OAuth2 asli.

Apakah saya mengerti benar. Solusi ini mengubah kode zammad untuk melakukan permintaan terpisah ke /api/users/me untuk mendapatkan kredensial pengguna?

Oh begitu. Ya, itulah yang dilakukannya. Saya pikir itu bisa menjadi cara umum bagi Anda untuk pergi jika saya mendapatkan skenario Anda dengan benar. Seperti yang dinyatakan dalam edisi lain, kami akan mencoba memasukkan ini ke dalam Zammad. Apakah ini akan mencakup kasus Anda jika Anda dapat mengonfigurasi URL /api/users/me untuk penyedia Anda?

PS: Bagus - menerapkannya asli

Dari sudut pandang saya, Modul OAuth2 membutuhkan param konfigurasi tambahan yang merupakan "User lookup Url".

Juga /vendor/lib/oauth2_database.rb harus diubah seperti ini:

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

Apakah kode di atas berfungsi dalam kasus Anda? Sudahkah Anda mengujinya? Akan sangat bagus untuk menyelesaikan masalah Anda dan #775 dengan satu strategi autentikasi.

Hai!

Saat ini saya sedang tidak di kantor. Saya akan menguji ini besok dan memberi Anda tanggapan segera setelah saya melakukannya!

Keserakahan dari austria!

Jangan khawatir - kami di sini Salam untuk Austria dari Berlin

Hai! Dengan cara ini login berfungsi!

!TAPI!: Setiap kali akun pengguna baru dibuat! Tidak mungkin untuk masuk ke semua yang sudah ada!

  • edit *: Saya baru saja lupa bidang id pengguna. sekarang semua bekerja!

Rekomendasi:
Saya juga merekomendasikan untuk meningkatkan konfigurasi dengan beberapa bidang:

  • URL untuk Pencarian Pengguna
  • Nama bidang dalam respons pencarian email
  • Nama bidang dalam respons pencarian login
  • Nama bidang dalam respons pencarian nama depan
  • Nama bidang dalam respons pencarian nama belakang
  • Nama bidang dalam respons pencarian dari id pengguna ditambahkan

Saya akan merekomendasikan kode berikut:
`kelas Oauth2Database < OmniAuth::Strategi::OAuth2
opsi: nama, 'oauth2'

def menginisialisasi (aplikasi, *args, &blok)
# pencarian basis data
config = Setting.get('auth_oauth2_credentials') || {}
args[0] = konfigurasi['app_id']
args[1] = config['app_secret']
args[2][:client_options] = args[2][:client_options].merge(config.symbolize_keys)
super
akhir

def callback_url
full_host + script_name + callback_path
akhir

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

info lakukan
{
email: raw_info[config['user_info_email']],
nama pengguna: 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']],
}
akhir

ekstra lakukan
{
'raw_info' => raw_info
}
akhir

def raw_info
@raw_info ||= access_token.get(config['user_info_url']).diuraikan
akhir

akhir`

Anda akan membutuhkan bidang konfigurasi berikut:

  • user_info_id
  • pengguna_info_email
  • pengguna_info_login
  • pengguna_info_namadepan
  • pengguna_info_nama belakang
  • Salam dari AT!
    David

Bagus! Terima kasih untuk umpan baliknya. Saya melihat lagi kode Omniauth dan kode kami. Bisakah Anda memeriksa apakah Anda memiliki entri di tabel database authorizations ? Anda dapat memeriksanya melalui akses langsung atau konsol Rails Authorization.all .

Jika tidak maka parameter uid mungkin hilang.

Kami membahas topik tersebut dan memutuskan untuk memperluas dan memfaktorkan ulang seluruh hal OAuth2. Ini akan mencakup penerapan konfigurasi yang Anda rekomendasikan. Namun ini mungkin memakan waktu karena daftar kami memiliki beberapa tugas yang lebih mendesak. Saya akan membuat masalah terpisah untuk ini dan merujuk ke masalah ini di sini.

Hai!

Ya sekarang ada entri di tabel otorisasi!
Bagi saya sekarang alle bekerja! (Menggunakan kode saya yang diubah)

:-) Keserakahan dari Innsbruck, Austria :-)

BAIK! Maukah Anda memposting solusi Anda di sini sehingga orang lain dapat mengambil manfaat darinya / kami dapat memastikan bahwa refactoring kami dapat menggantikan penyesuaian Anda?

Salam untuk Innsbruck dari Berlin

Hai! Maaf atas respon saya yang terlambat! Inilah solusi saya:

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

Ini harus ditetapkan sebagai konten file /vendor/lib/oauth2_database.rb!

Aplikasi Anda harus memberikan Respon sebagai url /api/me dengan semua bidang yang digunakan dalam "raw_info".

Jika ada pertanyaan dari siapa pun jangan ragu untuk bertanya :-)

Niiiii! Terima kasih @ThePatzen! Saya memformat ulang kode sedikit. Penutupan untuk saat ini. Bersenang-senanglah dengan autentikasi Zammad OAuth2 Anda yang baru

Hai teman-teman, saya memiliki masalah yang sama menggunakan wso2is sebagai server identitas. Saya tidak mengerti jalur "/api/me" tidak merespons di zammad, sama untuk "/api/users/me" seperti menulis di edisi 775. Hanya di zammad renspond "/api/v1/users/me" tetapi hanya jika saya masuk ... tetapi di bagian ini saya pikir saya tidak masuk lagi ... Seseorang dapat membantu saya?

Halo kawan-kawan!

Saya memecahkan masalah saya dengan wso2is mengubah def raw_info sebagai berikut:

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
Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

metasnw picture metasnw  ·  3Komentar

alveolus picture alveolus  ·  3Komentar

infestdead picture infestdead  ·  3Komentar

robwilc picture robwilc  ·  3Komentar

sthag picture sthag  ·  3Komentar