Как стать автором
Обновить

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 => 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.

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.