gitlab за https, завершающий обратный прокси и oauth

Я установил GitLab 7.8.4 на сервере за фунтом, который прерывает для меня HTTPS-соединения.

Как мне настроить GitLab так, чтобы он всегда предполагал, что доступ к нему осуществляется через HTTPS, не позволяя ему также обрабатывать HTTPS-соединение?

На практике я вижу следующую проблему:

Я добавляю аутентификацию GitHub в свой экземпляр GitLab и пытаюсь войти в GitLab, используя свою учетную запись GitHub. Это отлично работает, пока все работает по HTTP. Но если я использую адрес HTTPS для своего экземпляра GitLab, то аутентификация с GitHub не удастся.

Проблема, похоже, в том, что GitLab передает HTTP-адрес в GitHub следующим образом:

https://github.com/login/oauth/authorize?response_type=code&client_id=[...]&redirect_uri=http%3A%2F%2Fgitlab.myurl.com%2Fusers%2Fauth%2Fgithub%2Fcallback&state=[...]&scope=user%3Aemail

И тогда GitHub отвечает:

/?error=redirect_uri_mismatch&error_description=The+redirect_uri+MUST+match+the+registered+callback+URL+for+this+application.&error_uri=https%3A%2F%2Fdeveloper.github.com%2Fv3%2Foauth%2F%23redirect-uri-mismatch&state=[...]

Я никогда не хочу получать доступ к своему экземпляру GitLab только по http. Как заставить GitLab сообщать https:// url в GitHub, не обрабатывая сам HTTPS?


person josch    schedule 15.03.2015    source источник


Ответы (4)


Хотя @josch уже дал ответ на его конкретную проблему, у меня был еще один случай этой ошибки с другим решением.

При запуске GitLab 7.7.2 («из источника») за прокси-сервером Apache такая же ошибка произошла при попытке авторизации с помощью моей учетной записи GitHub, хотя я использовал

RequestHeader set X-Forwarded-Proto "https"

в конфигурации сайта.

Как выяснилось, исправление заключалось в том, чтобы установить для протокола OAuth Authorization callback URL на GitHub значение http:// вместо https://, хотя сайт общедоступен только через SSL.

URL-адрес авторизации GitHub OAuth

person sunside    schedule 18.03.2015
comment
Спасибо, я снова столкнулся с проблемой с gitlab 8.4.3, и мое старое исправление, похоже, больше не работает, но ваше работает. - person josch; 12.02.2016
comment
Кстати, в конце концов я решил запустить GitLab в докере, и у меня это очень хорошо работает. URL-адреса клонов SSH выглядят немного странно из-за использования вторичного порта SSH, но в остальном они идеальны. Возможно, вы захотите попробовать. - person sunside; 12.02.2016

После некоторой игры я обнаружил, что установка следующего в конфигурации nginx решает проблему:

proxy_set_header    X-Forwarded-Proto   https;

Поскольку я всегда хочу получить доступ к своему экземпляру gitlab через https, это хорошо работает для меня и, похоже, теперь также делает возможным oauth.

Извините, я должен был поиграть с этим подольше, прежде чем опубликовать этот вопрос, но, возможно, это поможет кому-то еще с той же проблемой.

person josch    schedule 15.03.2015
comment
Я знаю, что это нарушение правил сообщества - просто поблагодарить кого-то в комментарии, но мне пришлось оставить это благодарственное письмо. Моя команда и я потратили последние 7 часов, пытаясь получить соответствующую подпись OAuth. Мы выяснили, что URI запроса немного отличается (http против https) из-за нашего обратного прокси, но у нас не было плана, как его изменить. Мы даже зашли в нашу стороннюю библиотеку OAuth, чтобы попытаться переписать генерацию подписи. Этот простой переключатель (плюс proxy_redirect) позволил нам решить проблему. Меняется всего 2 строчки конфига. Спасибо еще раз. - person Tristan Tao; 25.08.2016

gitlab-ctl tail поставил меня на путь. Вот настройки, которые у меня сработали:

В конфигурации приложения в Github я использовал точно такое же значение для

  • URL главной страницы
  • и URL-адрес обратного вызова авторизации.

Я использовал значение https://MY_GITLAB_FQDN/ (MY_GITLAB_FQDN заменяется моим фактическим именем хоста). Обратите внимание на букву S в схеме HTTPS.

В моем (внешнем) конфиге nginx у меня уже была строфа

proxy_set_header X-Forwarded-Proto $scheme;

Моя конфигурация:

  • Gitlab-CE 8.6.2, устанавливается с пакетами Omnibus
  • Сервер Ubuntu 14.04
  • внешний nginx (таким образом, nginx с gitlab.rb отключен)
person Matthieu FAURE    schedule 01.04.2016

В моем случае проблема была устранена путем установки переменной external_url с протоколом https в URL-адресе в конфигурация омнибуса

person fuomag9    schedule 20.02.2021