Zammad: Oauth2 سؤال

تم إنشاؤها على ٧ مارس ٢٠١٧  ·  22تعليقات  ·  مصدر: zammad/zammad

أهلا!

أنا أقوم بتنفيذ خدمة Oauth2 وأريد تسجيل الدخول إلى Zammad باستخدامها.

كل شيء يعمل بشكل جيد ولكن في الخطوة التي يحصل فيها Zammad على رمز الوصول ويجب أن يقوم بتسجيل الدخول للمستخدم ، أحصل على الخطأ التالي في السجلات:

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

لا أجد أي وثائق حول كيفية جلب zammad لبيانات اعتماد المستخدم عبر Oauth2؟

في أي من وثائق Oauth2 ، يجب أن تحتوي الاستجابة لطلب الرمز المميز فقط على access_token وقيم انتهاء الصلاحية.

هل يمكن أن تعطيني تلميحًا من فضلك؟

أطيب التحيات من النمسا!

  • ديفيد
question

التعليق الأكثر فائدة

اهلا ياجماعة!

لقد قمت بحل مشكلتي مع wso2is بتغيير def raw_info على النحو التالي:

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

ال 22 كومينتر

Zammad لا يدعم طريقة تسجيل الدخول إلى Access Token. نحتاج إلى بيانات اعتماد المستخدم في حمولة الاستجابة.

مأخوذة من تذكرة (# 102057):
يعمل مقدمو الخدمات الآخرون على النحو التالي:

تم تكوين Zammad لموفر المصادقة (مثل Github). بعد ذلك تظهر الأيقونة في شاشة تسجيل الدخول. بعد النقر على الرمز / الرابط ، تتم إعادة توجيه المستخدم إلى عنوان URL omniauth. بعد ذلك ، كل شيء حتى استلام أوراق الاعتماد خارج نطاق Zammad ويتم التعامل معه بواسطة omniauth.
ينشئ Omniauth عنوان URL ويعيد توجيه المستخدم بمعلمات OAuth2 المطلوبة إلى صفحة تسجيل الدخول المطابقة للمزود. هناك تتم المصادقة.
أحد معلمات omniauth هو عنوان URL لمعاودة الاتصال. بعد الانتهاء من المصادقة ، تتم إعادة توجيه المستخدم إلى عنوان URL هذا بواسطة المزود. تم تكوين عنوان URL لرد الاتصال في قائمة المسارات الخاصة بنا:

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

ينفق المسار الطلب إلى وحدة التحكم في الجلسات ، والتي تحاول تحديد المستخدم أو إنشائه إذا تعذر العثور عليه:

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

هذا ما تم القيام به هنا:

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

هذه المعلمات مطلوبة من قبل Zammad ويجب تقديمها من قبل المزود. المصادقة القائمة على الرمز المميز غير مدعومة.

أهلا!

أنا لا أفهم ردك.

لقد حاولت للتو:
! الإعدادات / الأمان -> إعداد Oauth2 العام. !

  1. في صفحة تسجيل الدخول ، انقر فوق OAuth2
  2. يعيد مستعرضي توجيهي إلى عنوان url الخاص بالتخويل كما هو محدد في التكوين باستخدام المعلمات client_id و client_secret و redirect_uri و response_type والحالة.
  3. ثم أقبل تسجيل الدخول باستخدام Oauth ويقوم مزود الخدمة بإعادة توجيهي إلى redirect_uri المحدد مع حالة وكود المعلمات. (هذا هو رمز التفويض ، أليس كذلك؟)
  4. يقدم Zammad طلبًا في الخلفية إلى عنوان url المميز من config مع params client_id، client_secret، code، Grant_type، redirect_uri. في هذه الحالة Grant_type = authorization_code لذا سأعيد access_token.

سير العمل هذا هو بالضبط كيف يجب أن يعتمد على الوثائق.

لا أفهم أين يجب أن نضع بيانات المستخدم.

  • ديفيد

مع دولة البارامز والرمز. (هذا هو رمز التفويض ، أليس كذلك؟)

هذه هي النقطة: يتوقع زمماد وجود بنية تجزئة تحتوي على بيانات المستخدم وليس كود مصادقة. يحتاج الهاش إلى البنية التالية:
https://github.com/zammad/zammad/blob/c71b0d36d4fcefdaae4e39f1859094727a3ca74c/app/models/authorization.rb#L79

نقطتك 4. لم تحدث. Zammad لا ينفذ أي طلبات بعد نجاح تسجيل دخول OAuth.

نقطتك 4. لم تحدث. Zammad لا ينفذ أي طلبات بعد نجاح تسجيل دخول OAuth.

لكن النقطة 4 هي الطلب إلى TOKEN_URL والذي يحدث في سجلاتي؟

  • 192.168.4.142 - - [07 / مارس / 2017: 14: 33: 23 +0100] "GET /oauth/authorize؟client_id=0815&redirect_uri=http٪3A٪2F٪2Fdomain.tld٪2Fauth٪2Foauth2٪2Fcallback&response_type=codedstate=971 HTTP / 1.1 " 302840 "
  • 192.168.4.64 - - [07 / مارس / 2017: 14: 33: 23 +0100] "POST / oauth / token HTTP / 1.1" 200216 "-" "Faraday v0.9.2"

أتحدث عن تسجيل دخول المستخدم باستخدام oauth2.

response_type=code غير مدعوم من قبل Zammad

ولكن هذا response_type=code تم تعيينه بواسطة Zammad عندما أضغط على زر "Oauth2" في صفحة تسجيل الدخول؟
لم يتم تعيين ذلك من قبل مزود Oauth الخاص بي ؟؟

🤔 سآخذ نظرة

مرحبًا ThePatzen - آسف على التأخير. قضيت بعض الوقت مع جزء موفر OAuth2 ووجدت أن بعض الأشخاص لديهم مشكلة مشابهة جدًا مثلك: # 775

هل تستخدم أيضًا مجموعة أدوات Django OAuth2؟ هل الحل البديل المقدم من firlevapz هنا يناسبك أيضًا؟

انتظر ردك.

مرحبًا thorsteneckel - لا توجد مشكلة! لا ، أنا لا أستخدم مجموعة الأدوات هذه. لقد قمت بتطبيق OAuth2 الأصلي.

هل أفهم الحق. هذا الحل يغير كود zammad للقيام بطلب منفصل إلى / api / users / me للحصول على بيانات اعتماد المستخدم؟

حسنا أرى ذلك. نعم ، هذا بالضبط ما يفعله. أعتقد أن هذا يمكن أن يكون طريقة عامة لتذهب إليها إذا فهمت السيناريو الخاص بك بشكل صحيح. كما هو مذكور في العدد الآخر سنحاول إيصال ذلك إلى زماد. هل سيغطي حالتك إذا كان بإمكانك تكوين عنوان URL /api/users/me لمزودك؟

ملاحظة: لطيفة - تنفيذها أصلية 🤓

من وجهة نظري ، تحتاج الوحدة النمطية OAuth2 إلى معلمة تكوين إضافية وهي "عنوان URL لبحث المستخدم".

يجب أيضًا تغيير /vendor/lib/oauth2_database.rb على النحو التالي:

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

هل يعمل الرمز أعلاه في حالتك؟ هل اختبرت ذلك؟ سيكون من الرائع حل مشكلتك و # 775 بإستراتيجية مصادقة واحدة.

أهلا!

أنا حاليا خارج المكتب. سأختبر هذا غدًا وسأرد عليك بمجرد أن أفعل ذلك!

طمع من النمسا!

لا تقلق - نحن هنا 🤓 تحياتي إلى النمسا من برلين

أهلا! بهذه الطريقة يعمل تسجيل الدخول!

! ولكن !: يتم إنشاء حساب مستخدم جديد في كل مرة! لا يمكن تسجيل الدخول إلى ملف موجود بالفعل!

  • تحرير *: لقد نسيت للتو حقل معرف المستخدم. الآن كل شيء يعمل!

توصية:
أوصي أيضًا بتحسين التكوين بعدة مجالات:

  • URL لبحث المستخدم
  • اسم الحقل في استجابة البحث للبريد الإلكتروني
  • اسم الحقل في استجابة البحث لتسجيل الدخول
  • اسم الحقل في استجابة البحث للاسم الأول
  • اسم الحقل في استجابة البحث للاسم الأخير
  • FIELDNAME في البحث والاستجابة للهوية المستخدم بإضافة

أوصي بالكود التالي:
`فئة Oauth2Database <OmniAuth :: Strategies :: OAuth2
الخيار: الاسم ، "oauth2"

تهيئة def (app ، * args ، & block)
# البحث في قاعدة البيانات
config = Setting.get ('auth_oauth2_credentials') || {}
args [0] = التكوين ['app_id']
args [1] = التكوين ['app_secret']
args [2] [: client_options] = args [2] [: client_options] .merge (config.symbolize_keys)
ممتاز
نهاية

def callback_url
full_host + script_name + callback_path
نهاية

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

المعلومات تفعل
{
البريد الإلكتروني: raw_info [config ['user_info_email']] ،
اسم المستخدم: raw_info [config ['user_info_username']] ،
تسجيل الدخول: raw_info [config ['user_info_login']] ،
first_name: raw_info [config ['user_info_firstname']] ،
last_name: raw_info [config ['user_info_lastname']] ،
}
نهاية

القيام اضافية
{
'raw_info' => raw_info
}
نهاية

def raw_info
raw_info || = access_token.get (config ['user_info_url']).
نهاية

النهاية

ستحتاج إلى حقول التكوين التالية:

  • user_info_id
  • user_info_email
  • user_info_login
  • user_info_firstname
  • user_info_lastname
  • تحياتي من AT!
    ديفيد

لطيف - جيد! شكرا على ملاحظاتك. لقد ألقيت نظرة أخرى على كود Omniauth ورمزنا. هل يمكنك التحقق مما إذا كان لديك إدخالات في جدول قاعدة البيانات authorizations ؟ يمكنك التحقق من ذلك إما عن طريق الوصول المباشر أو وحدة التحكم في ريلز Authorization.all .

إذا لم يكن الأمر كذلك ، فربما تكون معلمة uid مفقودة.

ناقشنا الموضوع وقررنا تمديد وإعادة تشكيل عنصر OAuth2 بأكمله. سيتضمن ذلك تنفيذ التكوينات التي أوصيت بها. ومع ذلك ، قد يستغرق هذا بعض الوقت لأن قائمتنا بها بعض المهام الأكثر إلحاحًا. سأقوم بإنشاء مشكلة منفصلة لهذا الأمر وأشير إلى هذه المشكلة هنا بعد ذلك.

أهلا!

نعم يوجد الآن إدخال في جدول التفويضات!
بالنسبة لي كل شيء يعمل الآن! (باستخدام الكود الذي تم تغييره)

:-) الجشع من إنسبروك ، النمسا :-)

لطيف - جيد! هل تمانع في نشر الحل الخاص بك هنا حتى يستفيد منه الآخرون / يمكننا التأكد من أن إعادة البناء لدينا قادرة على استبدال التخصيصات الخاصة بك؟

تحياتي إلى إنسبروك من برلين 🤙

أهلا! آسفة على ردي المتاخر! هذا هو الحل الخاص بي:

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

يجب تعيين هذا كمحتوى للملف /vendor/lib/oauth2_database.rb!

يجب أن يقدم تطبيقك ردًا كـ url / api / me مع جميع الحقول المستخدمة في "raw_info".

إذا كانت هناك أي أسئلة من أي شخص ، فلا تتردد في طرحها :-)

نيييتس! شكرا @ ThePatzen! أعدت تنسيق الكود قليلاً. يغلق الآن. استمتع بمصادقة Zammad OAuth2 الجديدة اللامعة 🤓

مرحبًا يا شباب ، لدي نفس المشكلة في استخدام wso2is كخادم هوية. لا أفهم أن مسار "/ api / me" لا يستجيب على zammad ، نفس الشيء بالنسبة لـ "/ api / users / me" مثل الكتابة في المشكلات 775. على zammad renspond فقط "/ api / v1 / users / me" ولكن فقط إذا قمت بتسجيل الدخول ... ولكن في هذا القسم أعتقد أنني لم أسجل الدخول مرة أخرى ... يمكن لأي شخص مساعدتي من فضلك؟

اهلا ياجماعة!

لقد قمت بحل مشكلتي مع wso2is بتغيير def raw_info على النحو التالي:

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
هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات