Zammad: httpsが使用されている場合のOmniauthOAuth redirect_uri_mismatch

作成日 2017年02月03日  ·  9コメント  ·  ソース: zammad/zammad

情報:

  • 使用済みZammadバージョン:1.2.0
  • オペレーティングシステム:Ubuntu 16.04

予想される行動:

  • githuboauthのコールバックURLでhttpsを使用します

実際の動作:

  • githuboauthのコールバックURLでhttpを使用します

動作を再現する手順:

  • httpタイプをhttps設定します
  • ログアウト
  • ログインページでgithubを使用して承認する

既知の回避策

nginxでhttphttpsにリダイレクトし、githuboauthアプリ設定でコールバックURLとしてhttpバージョンのURLを使用します

(#647に関連)

bug

最も参考になるコメント

こんにちは@ schurig-私はそれを手に入れたと思います! NGINXインストールで実行していますか? その場合は、構成を更新して、次の2行を追加してください。

        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

記録のために:新しいrails初期化子config/initializers/debug_ssl.rb Omniauthssl検出を上書きする初期化子を介して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それが私がしたことです。 もう1つは、機能するようにするための回避策です。

こんにちは@ schurig -ups。 早めにボタンを押してください😁

私は行動を分析し、あなたが抱えている問題を再現することができます。 残念ながら、これはZammadの範囲外であるため(Ominauthによって実行されます)、直接修正を提供することはできません。 それでも、それをさらに分析して、それを機能させるための最良の解決策を見つけます。

再現方法:

  • httpsZammadインスタンスをリバースプロキシ(NGINXなど)で実行します
  • Github / ZammadにGithubOAuth2アプリケーションを登録します
  • Zammadにログインしてみて、Githubページにリダイレクトされます
  • redirect_url GETパラメーターは、実際にはhttpsではなくhttpを使用したZammadURLであることに注意してください。

現在の状態:
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

それらのRACKENVのいくつかが正しく設定されていないようです。 NGINX confを介してこれに影響を与えることができるかどうか、またはRailsコンテキストで何らかの方法でそれを行う必要があるかどうかを確認する必要があります。

こんにちは@ schurig-私はそれを手に入れたと思います! NGINXインストールで実行していますか? その場合は、構成を更新して、次の2行を追加してください。

        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

記録のために:新しいrails初期化子config/initializers/debug_ssl.rb Omniauthssl検出を上書きする初期化子を介して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 評価