Zammad: Omniauth OAuth redirect_uri_mismatch рдЬрдм https рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 3 рдлрд╝рд░ре░ 2017  ┬╖  9рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: zammad/zammad

рдЗрдиреНрдлреЛрд╕:

  • рдкреНрд░рдпреБрдХреНрдд рдЬрд╝рдорд╛рдж рд╕рдВрд╕реНрдХрд░рдг: 1.2.0
  • рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо: Ubuntu 16.04

рдЕрдкреЗрдХреНрд╖рд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░:

  • github oauth рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ url рдореЗрдВ https рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░:

  • github oauth рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ url рдореЗрдВ http рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ

рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо:

  • http рдкреНрд░рдХрд╛рд░ https
  • рд▓реЙрдЧ рдЖрдЙрдЯ
  • рд▓реЙрдЧрд┐рди рдкреЗрдЬ рдкрд░ рдЬреАрдердм рдХреЗ рд╕рд╛рде рдЕрдзрд┐рдХреГрдд рдХрд░реЗрдВ

рдЬреНрдЮрд╛рдд рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб

рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди http https nginx рдореЗрдВ рдФрд░ github oauth рдРрдк рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдХреЙрд▓рдмреИрдХ url рдХреЗ рд░реВрдк рдореЗрдВ url рдХреЗ http рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ

(# 647 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд)

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рд╣рд╛рдп @schurig - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭ рдЧрдпрд╛! рдХреНрдпрд╛ рдЖрдк рдПрдХ NGINX рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрди рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:

        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рддрд░рд╣:
bildschirmfoto 2017-02-17 um 16 56 54

рдЕрдкрдиреЗ NGINX рдФрд░ Zammad рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВред рдЕрдкрд╛рдЪреЗ рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

RequestHeader set Host zammad.example.com
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП: рдореИрдВрдиреЗ рдПрдХ рд╢реБрд░реБрдЖрддреА рд░реЗрд▓ рд▓рд╛рдЗрди рдореЗрдВ рдУрдореНрдирд┐рдпреБрде рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд░реЗрд▓реНрд╕ рдЖрд░рд▓рд╛рдЗрдЬрд╝рд░ config/initializers/debug_ssl.rb рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реИрдХ.env рдХреЛ рдбрдВрдк рдХрд┐рдпрд╛ред

Rails.application.config.to_prepare do              # to_prepare ensures that the monkey patching happens before the first request
  OmniAuth::Strategy.class_eval do                  # reopen the class
    protected

    def ssl?                                        # redefine the ssl? method
      # DEBUG/CUSTOMIZATION
      File.write('/tmp/omniauth.log', request.env.inspect)
      # DEBUG/CUSTOMIZATION

      request.env['HTTPS'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SSL'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SCHEME'] == 'https' ||
        (request.env['HTTP_X_FORWARDED_PROTO'] && request.env['HTTP_X_FORWARDED_PROTO'].split(',')[0] == 'https') ||
        request.env['rack.url_scheme'] == 'https'
    end
  end
end

рдФрд░ рдХреЛрдИ рднреА рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рднреА 9 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рдХреЙрд▓рдмреИрдХ url рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ github рдкрд░ рд╕реЗрдЯ рд╣реИ, рди рдХрд┐ рдЬрд╝рдорд╛рдж рдкрд░ред

рдпрд╣рд╛рдБ:

screenshot_3

рд╢реБрдХреНрд░рд┐рдпрд╛ @ madd86 !

@ madd86 рдореИрдВрдиреЗ рдпрд╣реА рдХрд┐рдпрд╛ рд╣реИред рджреВрд╕рд░реА рдмрд╛рдд рд╕рд┐рд░реНрдл рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ рддрд╛рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗ

рд╣рд╛рдп @schurig - рдЕрдкред рдЬрд▓реНрджреА to рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдорд╛рд░реЛ

рдореИрдВрдиреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд┐рдпрд╛ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдореМрдЬреВрдж рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЕрдлрд╕реЛрд╕ рдХреА рдмрд╛рдд рд╣реИ рдХрд┐ рдпрд╣ рдЬрд╝рдорд╛рдж рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ (рдУрдорд┐рдирд╛рде рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╕реАрдзрд╛ рдирд┐рд░реНрдзрд╛рд░рдг рдирд╣реАрдВ рджреЗ рд╕рдХрддреЗред рдлрд┐рд░ рднреА рд╣рдо рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗред

рдХреИрд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░реЗрдВ:

  • рдХрд┐рд╕реА рд╡рд┐рдкрд░реАрдд рдкреНрд░реЙрдХреНрд╕реА рдЬреИрд╕реЗ NGINX рдХреЗ рд╕рд╛рде https Zammad рдЙрджрд╛рд╣рд░рдг рдЪрд▓ рд░рд╣рд╛ рд╣реИ
  • Github / Zammad рдореЗрдВ Github OAuth2 рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ
  • рдЬрд╝рдорд╛рдж рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ, рдЬреАрдердм рдкреГрд╖реНрда рдкрд░ рдкреБрдирдГ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реЗрдВ
  • рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ Redirect_url GET рдкреИрд░рд╛рдореАрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ https рдХреЗ рдмрдЬрд╛рдп http рдХреЗ рд╕рд╛рде Zammad url рд╣реИ

рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐:
рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ_рдпреВрд░рд▓ рдпрд╣рд╛рдБ рд╕реЗ рдЖрддрд╛ рд╣реИ:
https://github.com/intridea/omniauth-github/blob/master/lib/omniauth/strategies/github.rb#L5
https://github.com/intridea/omniauth-oauth2/blob/master/lib/omniauth/strategies/oauth2.rb#L47
https://github.com/omniauth/omniauth/blob/8098855f6b52f5f1aecbd700e7068f204adddfdd/lib/omniauth/strategy.rn#L435
https://github.com/omniauth/omniauth/blob/8098855f6b52f5f1aecbd700e7068f204adddfdd/lib/omniauth/strategy.rn#L428
https://github.com/omniauth/omniauth/blob/8098855f6b52f5f1aecbd700e7068f204adddfdd/lib/omniauth/strategy.rn#L503

рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ RACK ENV рдареАрдХ рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реИрдВред рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣рдо NGINX рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рд░реЗрд▓ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХрд░рдирд╛ рд╣реИред

рд╣рд╛рдп @schurig - рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рдордЭ рдЧрдпрд╛! рдХреНрдпрд╛ рдЖрдк рдПрдХ NGINX рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣реЗ рд╣реИрдВ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ рдФрд░ рдЗрди рджреЛ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝реЗрдВ:

        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-Port 443;

рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреА рддрд░рд╣:
bildschirmfoto 2017-02-17 um 16 56 54

рдЕрдкрдиреЗ NGINX рдФрд░ Zammad рдХреЛ рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░реЗрдВ рдФрд░ рдореБрдЭреЗ рдмрддрд╛рдПрдВред рдЕрдкрд╛рдЪреЗ рдпреЗ рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:

RequestHeader set Host zammad.example.com
RequestHeader set X-Forwarded-Proto https
RequestHeader set X-Forwarded-Port 443

рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП: рдореИрдВрдиреЗ рдПрдХ рд╢реБрд░реБрдЖрддреА рд░реЗрд▓ рд▓рд╛рдЗрди рдореЗрдВ рдУрдореНрдирд┐рдпреБрде рдПрд╕рдПрд╕рдПрд▓ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдИ рд░реЗрд▓реНрд╕ рдЖрд░рд▓рд╛рдЗрдЬрд╝рд░ config/initializers/debug_ssl.rb рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд░реИрдХ.env рдХреЛ рдбрдВрдк рдХрд┐рдпрд╛ред

Rails.application.config.to_prepare do              # to_prepare ensures that the monkey patching happens before the first request
  OmniAuth::Strategy.class_eval do                  # reopen the class
    protected

    def ssl?                                        # redefine the ssl? method
      # DEBUG/CUSTOMIZATION
      File.write('/tmp/omniauth.log', request.env.inspect)
      # DEBUG/CUSTOMIZATION

      request.env['HTTPS'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SSL'] == 'on' ||
        request.env['HTTP_X_FORWARDED_SCHEME'] == 'https' ||
        (request.env['HTTP_X_FORWARDED_PROTO'] && request.env['HTTP_X_FORWARDED_PROTO'].split(',')[0] == 'https') ||
        request.env['rack.url_scheme'] == 'https'
    end
  end
end

рдФрд░ рдХреЛрдИ рднреА рдЬрд╛рдВрдЪрд╛ рдЧрдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрд╣реА рд╕рдорд╕реНрдпрд╛ рдереА! рдзрдиреНрдпрд╡рд╛рдж!! ЁЯШН ЁЯШН

рдкреНрд░рддрд┐рдкреБрд╖реНрдЯрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдХрдорд┐рдЯ рдЕрдкрдиреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рд╣реИред ЁЯЪА рдЕрдЧрд▓реЗ рдЕрдВрдХ рддрдХред

рдЗрд╕ рдЬрд╡рд╛рдм рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЛ рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд┐рдпрд╛
https://stackoverflow.com/a/41466634/1770571

@salmagomaa рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ Zammad рдХреЗ рднреАрддрд░ рдПрдХ рдмрдЧ рдерд╛ред
рдХреГрдкрдпрд╛ рдкреЛрд╕реНрдЯ рдХреЛ рд░реАрд╕рд╛рдпрдХрд▓ рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ - рд╕рдорд╕реНрдпрд╛ рдкрд╣рд▓реЗ рд╣реА рд╣рд▓ рд╣реЛ рдЧрдИ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

metasnw picture metasnw  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

adonno picture adonno  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

em-ex picture em-ex  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

fthommen picture fthommen  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

SummerStorm picture SummerStorm  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ