Zammad: https ์‚ฌ์šฉ์‹œ Omniauth OAuth redirect_uri_mismatch

์— ๋งŒ๋“  2017๋…„ 02์›” 03์ผ  ยท  9์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: zammad/zammad

์ •๋ณด :

  • ์ค‘๊ณ  Zammad ๋ฒ„์ „ : 1.2.0
  • ์šด์˜ ์ฒด์ œ : Ubuntu 16.04

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘ :

  • github oauth์˜ ์ฝœ๋ฐฑ URL์—์„œ https ์‚ฌ์šฉ

์‹ค์ œ ํ–‰๋™ :

  • github oauth์˜ ์ฝœ๋ฐฑ URL์— http๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋™์ž‘์„ ์žฌํ˜„ํ•˜๋Š” ๋‹จ๊ณ„ :

  • http ์œ ํ˜•์„ https
  • ๋กœ๊ทธ ์•„์›ƒ
  • ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€์—์„œ github๋กœ ์ธ์ฆ

์•Œ๋ ค์ง„ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

nginx์—์„œ http ์„ https ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๊ณ  github oauth ์•ฑ ์„ค์ •์—์„œ URL์˜ http ๋ฒ„์ „์„ ์ฝœ๋ฐฑ URL๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

(# 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๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  ์•Œ๋ ค์ฃผ์„ธ์š”. Apache๋Š” ๋‹ค์Œ ํ–‰์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

๊ธฐ๋ก์„ ์œ„ํ•ด : ์ƒˆ๋กœ์šด ๋ ˆ์ผ ์ด๋‹ˆ์…œ ๋ผ์ด์ € config/initializers/debug_ssl.rb ์—์„œ Omniauth SSL ๊ฐ์ง€๋ฅผ ๋ฎ์–ด ์“ฐ๋Š” ์ด๋‹ˆ์…œ ๋ผ์ด์ €๋ฅผ ํ†ตํ•ด rack.envs๋ฅผ ๋คํ”„ํ–ˆ์Šต๋‹ˆ๋‹ค.

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์€ ์‹ค์ œ๋กœ Zammad๊ฐ€ ์•„๋‹Œ github์— ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ:

screenshot_3

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @ madd86 !

@ madd86 ๊ทธ๊ฒŒ ๋‚ด๊ฐ€ ํ•œ ์ผ์ž…๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๊ฒƒ์€ ์ž‘๋™ํ•˜๋„๋ก ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @schurig -ups. ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ์ผ์ฐ ๐Ÿ˜

๋‚˜๋Š” ํ–‰๋™์„ ๋ถ„์„ํ•˜๊ณ  ๋‹น์‹ ์ด ๊ฒช๊ณ ์žˆ๋Š” ๋ฌธ์ œ๋ฅผ ์žฌํ˜„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šฌํ”„๊ฒŒ๋„ Zammad ๋ฒ”์œ„ (Ominauth์—์„œ ์ˆ˜ํ–‰)๋ฅผ ๋ฒ—์–ด ๋‚ฌ์œผ๋ฏ€๋กœ ์ง์ ‘ ์ˆ˜์ •์„ ์ œ๊ณต ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์„ ์ž‘๋™์‹œํ‚ค๊ธฐ์œ„ํ•œ ์ตœ์ƒ์˜ ์†”๋ฃจ์…˜์„ ์ฐพ๊ธฐ ์œ„ํ•ด ๊ทธ๊ฒƒ์„ ๋” ๋ถ„์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์žฌ์ƒ์‚ฐ ๋ฐฉ๋ฒ• :

  • NGINX์™€ ๊ฐ™์€ ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ๋กœ ์‹คํ–‰๋˜๋Š” https Zammad ์ธ์Šคํ„ด์Šค๊ฐ€ ์žˆ์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • Github / Zammad์— Github OAuth2 ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก
  • Zammad์— ๋กœ๊ทธ์ธ์„ ์‹œ๋„ํ•˜๊ณ  Github ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค.
  • redirect_url GET ๋งค๊ฐœ ๋ณ€์ˆ˜๋Š” ์‹ค์ œ๋กœ https ๋Œ€์‹  http๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Zammad URL์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ์ƒํƒœ :
redirect_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.rb#L435
https://github.com/omniauth/omniauth/blob/8098855f6b52f5f1aecbd700e7068f204adddfdd/lib/omniauth/strategy.rb#L428
https://github.com/omniauth/omniauth/blob/8098855f6b52f5f1aecbd700e7068f204adddfdd/lib/omniauth/strategy.rb#L503

์ด๋Ÿฌํ•œ RACK ENV ์ค‘ ์ผ๋ถ€๊ฐ€ ์ œ๋Œ€๋กœ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. NGINX conf๋ฅผ ํ†ตํ•ด ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ๋Š”์ง€ ๋˜๋Š” Rails ์ปจํ…์ŠคํŠธ์—์„œ ์–ด๋–ป๊ฒŒํ•ด์•ผํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์•ˆ๋…•ํ•˜์„ธ์š” @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๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  ์•Œ๋ ค์ฃผ์„ธ์š”. Apache๋Š” ๋‹ค์Œ ํ–‰์ด์–ด์•ผํ•ฉ๋‹ˆ๋‹ค.

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

๊ธฐ๋ก์„ ์œ„ํ•ด : ์ƒˆ๋กœ์šด ๋ ˆ์ผ ์ด๋‹ˆ์…œ ๋ผ์ด์ € config/initializers/debug_ssl.rb ์—์„œ Omniauth SSL ๊ฐ์ง€๋ฅผ ๋ฎ์–ด ์“ฐ๋Š” ์ด๋‹ˆ์…œ ๋ผ์ด์ €๋ฅผ ํ†ตํ•ด rack.envs๋ฅผ ๋คํ”„ํ–ˆ์Šต๋‹ˆ๋‹ค.

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 ๋“ฑ๊ธ‰