ããïŒ
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ããã¥ã¡ã³ãã§ã¯ãtoken-requestãžã®å¿çã«ã¯ãaccess_tokenãšexpiresã®å€ã®ã¿ãå«ããå¿ èŠããããŸãã
ãã³ããæããŠãã ããã
ãªãŒã¹ããªã¢ããããããïŒ
Zammadã¯ãã¢ã¯ã»ã¹ããŒã¯ã³ã®ãã°ã€ã³æ¹æ³ããµããŒãããŠããŸããã å¿çãã€ããŒãã«ãŠãŒã¶ãŒã®è³æ Œæ å ±ãå¿ èŠã§ãã
ãã±ããããååŸïŒïŒ102057ïŒïŒ
ä»ã®ãããã€ããŒã¯æ¬¡ã®ããã«æ©èœããŸãã
Zammadã¯ãèªèšŒãããã€ããŒïŒGithubãªã©ïŒçšã«æ§æãããŠããŸãã ãã®åŸããã°ã€ã³ç»é¢ã«ã¢ã€ã³ã³ã衚瀺ãããŸãã ã¢ã€ã³ã³/ãªã³ã¯ãã¯ãªãã¯ãããšããŠãŒã¶ãŒã¯ãªã ãèªèšŒURLã«ãªãã€ã¬ã¯ããããŸãã ãã®åŸãè³æ Œæ
å ±ãåãåããŸã§ã®ãã¹ãŠãZammadã®ç¯å²å€ã«ãªããomniauthã«ãã£ãŠåŠçãããŸãã
Omniauthã¯URLãäœæããå¿
èŠãªOAuth2ãã©ã¡ãŒã¿ãŒãæã€ãŠãŒã¶ãŒããããã€ããŒã®äžèŽãããã°ã€ã³ããŒãžã«ãªãã€ã¬ã¯ãããŸãã ããã§èªèšŒãè¡ãããŸãã
omnââiauthãã©ã¡ãŒã¿ãŒã®1ã€ã¯ãã³ãŒã«ããã¯URLã§ãã èªèšŒãè¡ãããåŸããŠãŒã¶ãŒã¯ãããã€ããŒã«ãã£ãŠãã®URLã«ãªãã€ã¬ã¯ããããŸãã ã³ãŒã«ããã¯URLã¯ãã«ãŒããªã¹ãã§æ§æãããŸãã
ã«ãŒãã¯ãèŠæ±ãã»ãã·ã§ã³ã³ã³ãããŒã©ãŒã«ãã³ããªã³ã°ããŸããã»ãã·ã§ã³ã³ã³ãããŒã©ãŒã¯ããŠãŒã¶ãŒãå€å¥ãããããŠãŒã¶ãŒãèŠã€ãããªãå Žåã¯äœæããããšããŸãã
ããã¯ããã§è¡ãããŸãïŒ
ãããã®ãã©ã¡ãŒã¿ãŒã¯Zammadãå¿ èŠãšãããããã€ããŒãæåºããå¿ èŠããããŸãã ããŒã¯ã³ããŒã¹ã®èªèšŒã¯ãµããŒããããŠããŸããã
ããïŒ
ããªãã®åå¿ãããããŸããã
ç§ã¯ã¡ããã©è©ŠããŸããïŒ
ïŒ èšå®/ã»ãã¥ãªãã£->æ±çšOauth2ã®ã»ããã¢ããã ïŒ
ãã®ã¯ãŒã¯ãããŒã¯ãããã¥ã¡ã³ãã«å¿ããŠæ£ç¢ºã«ã©ã®ããã«ãã¹ããã§ãã
ãŠãŒã¶ãŒããŒã¿ãã©ãã«èšå®ããã°ããã®ãããããŸããã
paramsã®ç¶æ ãšã³ãŒãã䜿çšããŸãã ïŒããã¯èªèšŒã³ãŒãã§ãããïŒïŒ
ããããã€ã³ãã§ããZammadã¯ãèªèšŒã³ãŒãã§ã¯ãªããŠãŒã¶ãŒããŒã¿ãå«ãããã·ã¥æ§é ãæ³å®ããŠããŸãã ããã·ã¥ã«ã¯æ¬¡ã®æ§é ãå¿
èŠã§ãã
https://github.com/zammad/zammad/blob/c71b0d36d4fcefdaae4e39f1859094727a3ca74c/app/models/authorization.rb#L79
ããªãã®ãã€ã³ã4.ã¯èµ·ãããŸããã§ããã OAuthãã°ã€ã³ãæåããåŸãZammadã¯ãªã¯ãšã¹ããå®è¡ããŸããã
ããªãã®ãã€ã³ã4.ã¯èµ·ãããŸããã§ããã OAuthãã°ã€ã³ãæåããåŸãZammadã¯ãªã¯ãšã¹ããå®è¡ããŸããã
ãããããã€ã³ã4ã¯ããã°ã§çºçããTOKEN_URLãžã®ãªã¯ãšã¹ãã§ããïŒ
oauth2ã䜿çšãããŠãŒã¶ãŒãã°ã€ã³ã«ã€ããŠè©±ããŸãã
response_type=code
ã¯Zammadã§ã¯ãµããŒããããŠããŸãã
ãããããã®response_type=code
ã¯ããã°ã€ã³ããŒãžã®[Oauth2]ãã¿ã³ãæŒããšãZammadã«ãã£ãŠèšå®ãããŸããïŒ
ããã¯ç§ã®Oauthãããã€ããŒã«ãã£ãŠèšå®ãããŠããŸãããïŒ
ð€èŠãŠã¿ãŸã
ããã«ã¡ã¯@ ThePatzen-é ããŠãã¿ãŸããã ç§ã¯OAuth2ãããã€ããŒã®éšåã§ãã°ããéãããŸããããããªãã®ãããªéåžžã«ãã䌌ãåé¡ãæ±ããŠãã人ãããŸãïŒïŒ775
Django OAuth2ããŒã«ãããã䜿çšããŠããŸããïŒ ããã§@firlevapzã«ãã£ãŠæäŸãããåé¿çã¯ããªãã«ã
ããªãããèããŠæ¥œãã¿ã«ããŠã
ããã«ã¡ã¯@ thorsteneckel-åé¡ãããŸããïŒ ãããããã®ããŒã«ãããã¯äœ¿çšããŠããŸããã OAuth2ãã€ãã£ããå®è£ ããŸããã
ç§ã¯æ£ããç解ããŠããŸããã ãã®åé¿çã¯ããŠãŒã¶ãŒã®è³æ Œæ å ±ãååŸããããã«/ api / users / meã«åå¥ã®ãªã¯ãšã¹ããè¡ãããã«zammadã³ãŒããå€æŽããŸããïŒ
ãããªãã»ã©ã ã¯ããããã¯ãŸãã«ãããããããšã§ãã ç§ãããªãã®ã·ããªãªãæ£ããç解ããã°ãããã¯ããªããè¡ãããã®äžè¬çãªæ¹æ³ãããããªããšæããŸãã ä»ã®å·ã§è¿°ã¹ãããã«ããããZammadã«åãå
¥ããããšããŸãã ãããã€ããŒã®/api/users/me
URLãæ§æã§ãããšããããããã¯ããªãã®ã±ãŒã¹ãã«ããŒããŸããïŒ
PSïŒããã§ãã-ãã€ãã£ãã«å®è£ ããŸãð€
ç§ã®èŠè§£ã§ã¯ã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
äžèšã®ã³ãŒãã¯ããªãã®å Žåã«æ©èœããŸããïŒ ããªãã¯ããããã¹ãããŸãããïŒ 1ã€ã®èªèšŒæŠç¥ã§åé¡ãšïŒ775ã解決ããã®ã¯çŽ æŽãããããšã§ãã
ããïŒ
ç§ã¯çŸåšäžåšã§ãã ææ¥ããããã¹ãããå®äºãããããã«å¿çããŸãã
ãªãŒã¹ããªã¢ããã®è²ªæ¬²ïŒ
å¿é ãããŸãã-ç§ãã¡ã¯ããã«ããŸãð€ãã«ãªã³ãããªãŒã¹ããªã¢ãžã®ãæšæ¶ð
ããïŒ ãã®ããã«ãã°ã€ã³ãæ©èœããŸãïŒ
ïŒBUTïŒïŒæ¯åæ°ãããŠãŒã¶ãŒã¢ã«ãŠã³ããäœæãããŸãïŒ ãã§ã«ååšããŠãããã®ã«ãã°ã€ã³ããããšã¯ã§ããŸããïŒ
ããããïŒ
ãŸããããã€ãã®ãã£ãŒã«ãã§æ§æã匷åããããšããå§ãããŸãã
次ã®ã³ãŒãããå§ãããŸãã
`ã¯ã©ã¹Oauth2Database <OmniAuth :: Strategies :: OAuth2
ãªãã·ã§ã³ïŒnameã 'oauth2'
def initializeïŒappã* argsãïŒblockïŒ
ïŒããŒã¿ããŒã¹ã«ãã¯ã¢ãã
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ïŒ
çŽ æŽããã
çµãã
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 || =
çµãã
çµäº `
次ã®æ§æãã£ãŒã«ããå¿ èŠã«ãªããŸãã
è¯ãïŒ ãã£ãŒãããã¯ããå¯ãããã ãããããšãããããŸãã Omniauthã³ãŒããšç§ãã¡ã®ã³ãŒããããäžåºŠèŠãŠã¿ãŸããã authorizations
ããŒã¿ããŒã¹ããŒãã«ã«ãšã³ããªããããã©ããã確èªã§ããŸããïŒ ããã¯ãçŽæ¥ã¢ã¯ã»ã¹ãŸãã¯Railsã³ã³ãœãŒã«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ã®ã³ã³ãã³ããšããŠèšå®ããå¿ èŠããããŸãã
ã¢ããªã±ãŒã·ã§ã³ã¯ããraw_infoãã§äœ¿çšããããã¹ãŠã®ãã£ãŒã«ãã䜿çšããŠãurl / api / meãšããŠå¿çãè¿ãå¿ èŠããããŸãã
誰ãããã®è³ªåãããã°é æ ®ãªãå°ããŠãã ãã:-)
NiiiiââiceïŒ ããããšã@ThePatzenïŒ ã³ãŒããå°ãåãã©ãŒãããããŸããã ãšããããç· ãããããŸãã å æ²¢ã®ããæ°ããZammadOAuth2èªèšŒãã楜ãã¿ãã ããð€
ããã«ã¡ã¯ã¿ããªãç§ã¯ã¢ã€ãã³ãã£ãã£ãµãŒããŒãšããŠwso2isã䜿çšããŠåãåé¡ãæ±ããŠããŸãã ã/ api / meããã¹ãzammadã§å¿çããªãããšãç解ããŠããŸãããããã¯ãåé¡775ã«æžã蟌ããããªã/ api / users / meãã§ãåãã§ããzammadã§ã¯ã/ api / v1 / users / meãã®ã¿ãå¿çããŸããããããç§ããã°ã€ã³ããå Žåã«éããŸã...ãããããã®ã»ã¯ã·ã§ã³ã§ã¯ãç§ã¯åã³ãã°ã€ã³ããŠããªããšæããŸã...誰ããç§ãå©ããŠãããŸããïŒ
ããã«ã¡ã¯ãã¿ããªïŒ
wso2isãdefraw_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
æãåèã«ãªãã³ã¡ã³ã
ããã«ã¡ã¯ãã¿ããªïŒ
wso2isãdefraw_infoã次ã®ããã«å€æŽãããšããåé¡ã解決ããŸãã