Gitlab Oauth Roundcube Webmail в стеке Postfix+dovecot+sieve+mysql+spamassasin+nginx (Linux)
Небольшой минигайд как привязать oauth от поставщика Gitlab к Roundcube и dovecot. Данная статья родилась потому, что ни в русском, ни в английском сегменте этой информации нет и хочется поделится своей работой :)
Для начала мы должны иметь минимально рабочую конфигурацию Roundcube+Postfix+dovecot+mysql, статей на эту тему на просторах интернета полно.
Итак, для начала займемся Gitlab
Поставщик Oauth - саморазмещаемый экземпляр Gitlab CE.Под учетной записью администратора нужно подключить приложение и создать секреты.
Admin area => ApplicationsRedirect URI: https://mail.EXAMPLE.ru/index.php/login/oauth
На выходе получим Application ID и Secret, которые нужно записать, они нам пригодятся.
Выбрать:
- "openid"
- "The application will be used where the client secret can be kept confidential. Native mobile apps and Single Page Apps are considered non-confidential."
Второй шаг - это настройка конфигурации Roundcube
Требуется перейти в файл конфигурации и внести параметры в конец config.inc.php$config['oauth_provider'] = "generic";
$config['oauth_provider_name'] = 'Gitlab';
$config['oauth_client_id'] = "УКАЗАТЬ Application ID ПОЛУЧЕННЫЙ НА ШАГЕ 1";
$config['oauth_client_secret'] = "УКАЗАТЬ Secret ПОЛУЧЕННЫЙ НА ШАГЕ 1";
$config['oauth_auth_uri'] = "https://gitlab.EXAMPLE.ru/oauth/authorize/";
$config['oauth_token_uri'] = "https://gitlab.EXAMPLE.ru/oauth/token/";
$config['oauth_identity_uri'] = "https://gitlab.EXAMPLE.ru/oauth/userinfo";
$config['oauth_verify_peer'] = true;
$config['oauth_scope'] = "openid";
$config['oauth_auth_parameters'] = [];
$config['oauth_identity_fields'] = ['email'];
$config['oauth_login_redirect'] = false;
Третий шаг настройка Dovecot
Вот здесь и начинаются пляски с бубном т.к информации в интернете нет, как прикрутить поставщика к gitlab к аутентификации dovecot, чтобы при этом сохранилась возможность зайти под логином паролем из mysql.
Переходим к конфигурации dovecot.conf
К auth_mechanisms
в конец следует добавить xoauth2 oauthbearer
Получится что-то вроде этого: auth_mechanisms = PLAIN LOGIN xoauth2 oauthbearer
Далее нам нужно добавить механизм ввода пароля существующее паралельно с дайвером mysql.
Между существующими userdb и passdb с driver = sql
вносим конфиг:passdb {
driver = oauth2
mechanisms = xoauth2 oauthbearer
args = /etc/dovecot/dovecot-oauth2.token.conf.ext}
Создаем файл dovecot-oauth2.token.conf.ext
по пути размещения dovecot
tokeninfo_url = https://gitlab.EXAMPLE.ru/oauth/token/info?access_token=
introspection_url = https://gitlab.EXAMPLE.ru/oauth/userinfo/
username_attribute = email
#introspection_mode = auth
force_introspection = yes
debug = no
Далее требуется проверить или настроить location
в конфигурации nginx проксирования Roundcube и fastcgi_params
Без этого редирект будет вываливаться в 404 ошибку.
location ~ [^/]\.php(/|$) {
fastcgi_split_path_info ^(.+?\.php)(/.*)$;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include /etc/nginx/fastcgi_params;
Добавляем в /etc/nginx/fastcgi_paramsfastcgi_param PATH_INFO
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
На выходе получим удобную кнопочку, которая поможет нам избежать ввода пароля, при желании ввод логина и пароля можно отключить и пользоваться только oauth.
