Pull to refresh

Gitlab Oauth Roundcube Webmail в стеке Postfix+dovecot+sieve+mysql+spamassasin+nginx (Linux)

Level of difficultyEasy

Небольшой минигайд как привязать oauth от поставщика Gitlab к Roundcube и dovecot. Данная статья родилась потому, что ни в русском, ни в английском сегменте этой информации нет и хочется поделится своей работой :)

Для начала мы должны иметь минимально рабочую конфигурацию Roundcube+Postfix+dovecot+mysql, статей на эту тему на просторах интернета полно.

Итак, для начала займемся Gitlab

Поставщик Oauth - саморазмещаемый экземпляр Gitlab CE.Под учетной записью администратора нужно подключить приложение и создать секреты.
Admin area => Applications

Redirect URI: https://mail.EXAMPLE.ru/index.php/login/oauth

Выбрать:
- "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."
На выходе получим Application ID и Secret, которые нужно записать, они нам пригодятся.

Второй шаг - это настройка конфигурации 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_params

fastcgi_param PATH_INFO
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;


На выходе получим удобную кнопочку, которая поможет нам избежать ввода пароля, при желании ввод логина и пароля можно отключить и пользоваться только oauth.

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.