Zammad: Единая точка входа

Созданный на 20 июн. 2017  ·  30Комментарии  ·  Источник: zammad/zammad

Информация:

  • Используемая версия Zammad: последняя
  • Используемый источник установки Zammad: rpm
  • Операционная система: CentOS 7
  • Браузер + версия: последняя версия Firefox

Это вопрос о системе единого входа. Мы используем Microsoft Active Directory в нашей компании, и вход в систему отлично работает с ldap-sync.
Мне интересно, возможно ли SSO. Я уже пробовал настроить его с помощью nginx, но ничего не вышло :-(

Есть простой способ сделать это? Может быть, кто-то из вас уже настроил Заммад с SSO? Было бы неплохо, если бы у кого-то была инструкция или несколько примеров, как это реализовать.

Заранее спасибо.

authentication documentation feature backlog prioritised by payment verified

Самый полезный комментарий

Благодаря @rlue, система единого входа наконец-то develop ! Через несколько недель он станет частью грядущего релиза 3.2. Обратите внимание, что обновление экземпляров Zammad с использованием ветки develop в настоящее время не работает. Мы над этим работаем. Однако вы можете протестировать SSO в новой (тестовой) системе Zammad.

@MrGeneration, не могли бы вы расширить документацию, чтобы охватить конфигурацию единого входа в следующий свободный временной интервал?

Все 30 Комментарий

Привет @ jaeger13!

Конечно, это возможно. Но вы должны использовать Apache httpd с mod_auth_kerb с такой конфигурацией:

<LocationMatch "/auth/sso">
  SSLRequireSSL
  AuthType Kerberos
  AuthName "Your Zammad"
  KrbMethodNegotiate On
  KrbMethodK5Passwd On
  KrbAuthRealms YOUR.REALM
  KrbLocalUserMapping on
  KrbServiceName HTTP/[email protected]
  Krb5KeyTab /etc/httpd/zammad.keytab
  require valid-user
</LocationMatch>

В зависимости от выбранного атрибута uid (ist sAMAccountName в приведенном выше примере) он будет работать из коробки.

И вам нужно настроить Apache как обратный прокси вместо nginx.

Пока модуль auth возвращает аутентифицированное имя пользователя в переменной окружения REMOTE_USER или HTTP_REMOTE_USER, можно использовать другие модули, такие как auth_mellon и т. Д.

hth, Рой

Привет @rkaldung ,

спасибо за быстрый ответ. Я попробую с Apache и вашими инструкциями :-)
Хотя мне хотелось, чтобы это можно было сделать с помощью nginx :-(

Спасибо!

Привет @ jaeger13!

Есть способ с nginx, но пока без тестирования. @martini Твои два цента на это?

Привет @rkaldung

Можете описать путь с NGINX? Это тоже меня очень заинтересует. Спасибо.

Привет @ scimitar4444

@rkaldung означает реализацию на уровне рельсов, например https://github.com/jgraichen/omniauth-kerberos, но сначала это необходимо реализовать в Zammad. 🤖

-Мартин

@martini Всегда остается только один коммит 😜

Я пытаюсь настроить систему единого входа, следуя вашим инструкциям. Однако просмотр http: //myserver.mydom.local/auth/sso возвращает меня на страницу входа. . . я что-то упускаю ?

Попытка использовать (Stanford) Webauth (и пользователя ldap) приводит к той же ошибке, после успешного входа в систему единого входа я получаю приглашение zammad для входа.
Использование: Ubuntu 16.04; Zammad 2.2.0; Apache, MariaDB; (REMOTE_USER устанавливается через webauth)

@rkaldung ты что-

Нашел обходной путь:

Проблема: необходимый модуль в lib / sso / env.rb вызывается без необходимого request.env из PUMA, поэтому REMOTE_USER недоступен.

Обходной путь:
Добавьте REMOTE_USER из request.env в ENV в zammad / app / controllers / sessions_controller.rb внутри функции create_sso

   # export required environment variables for sso
   ENV['REMOTE_USER'] = request.env['REMOTE_USER']
   ENV['HTTP_REMOTE_USER'] = request.env['HTTP_REMOTE_USER']

@martini. Может быть, проблема в новой версии PUMA?

РЕДАКТИРОВАТЬ: вам нужно добавить соответствующее правило для установки поля заголовка в httpd.conf, чтобы оно работало:

RequestHeader merge REMOTE_USER %{REMOTE_USER}s

Изменить 2018-01-08:
Теперь все работает с обходным путем от пикачупроф. Это была опечатка в конфигурации /etc/krb5.conf.

Информация:
Используемая версия Zammad: последняя
Используемый источник установки Zammad: rpm
Операционная система: CentOS 7
Браузер + версия: последняя версия Firefox

Apache Server Config:
<VirtualHost *:443>
    ServerName ***
    ServerAdmin ***

    DocumentRoot "/opt/zammad/public"

    <IfModule !mod_auth_kerb.c>
        LoadModule auth_kerb_module /usr/lib64/httpd/modules/mod_auth_kerb.so
    </IfModule>

    ProxyRequests Off
    ProxyPreserveHost On

    <Proxy localhost:3000>
        Require local
    </Proxy>

    ProxyPass /assets !
    ProxyPass /favicon.ico !
    ProxyPass /robots.txt !
    ProxyPass /ws ws://localhost:6042/
    ProxyPass / http://localhost:3000/

    <Directory />
        Options FollowSymLinks
        AllowOverride None
    </Directory>

    <Directory "/opt/zammad/public">
        Options FollowSymLinks
        Require all granted
    </Directory>

    <Location "/auth/sso">
        Order allow,deny
        Allow from all

        AuthType Kerberos
        AuthName "Ticketsystem Kerberos Login"
        KrbServiceName HTTP
        KrbMethodNegotiate on
        KrbMethodK5Passwd on
        KrbLocalUserMapping off
        KrbSaveCredentials on

        Require valid-user

        # Environment specific: Path to the keytab and the realm
        Krb5Keytab /etc/kerberos.keytab
        KrbAuthRealm ***
    </Location>

    SSLEngine on
    SSLCertificateFile /etc/pki/tls/certs/***
    SSLCertificateKeyFile /etc/pki/tls/private/***

    ErrorLog "logs/***-error_log"
    CustomLog "logs/***-access_log" common
</VirtualHost>

Когда я открываю https: // / auth / sso и «KrbLocalUserMapping on», мой браузер показывает следующую ошибку:Внутренняя Ошибка СервераСервер обнаружил внутреннюю ошибку или неправильную конфигурацию и не смог выполнить ваш запрос.Пожалуйста, свяжитесь с администратором сервера по адресу admin @, чтобы сообщить им о времени возникновения этой ошибки и действиях, которые вы выполнили непосредственно перед этой ошибкой.
Дополнительная информация об этой ошибке может быть доступна в журнале ошибок сервера.

Если я отключу KrbLocalUserMapping, мой браузер будет перенаправлен на https: // * / # login

Я пытаюсь установить «RequestHeader merge REMOTE_USER% {REMOTE_USER} s», но ничего не меняется.

Надеюсь, кто-то может помочь!

Мы добавили еще одно небольшое обходное решение:

RewriteEngine   On
RewriteCond     %{HTTP_COOKIE} !^.*zammad_session.*$
RewriteRule     ^/$ https://%{SERVER_NAME}/auth/sso [R,L]

Эти строки в Apache-config перенаправляют '/' в '/ auth / sso' только до тех пор, пока не установлен файл cookie zammad. Это позволяет перенаправить на страницу входа в систему единого входа без создания бесконечного цикла, приводящего к «внутренней ошибке сервера».

Кажется, я не могу заставить его работать. . . Журналы apache показывают мое имя пользователя для / auth / s, поэтому мой запрос перенаправляется на /, и мое имя пользователя пропадает. . . может я ошибся при редактировании функции create_sso !? Кто-нибудь может мне подсказать?

@pikachuprof Я работал над реализацией с использованием omniauth-kerberos .

Однако моя реализация требует, чтобы вы входили в систему каждый раз, когда вы хотите получить доступ к Zammad (конечно, используя свои учетные данные Kerberos) вместо использования «тикета Kerberos», который уже сгенерирован на машине пользователя. (например, от kinit или любого другого «клиента для продажи билетов Kerberos»)

Я надеюсь, что это нормально для базового входа в систему с использованием Kerberos, чтобы избежать хакерских ситуаций. 😊

Хотя мне кажется, что для расширенных конфигураций с 'одноразовым входом / аутентификацией' (например, используя kinit один раз и аутентифицируйте), а затем вы ssh / входите в zammad / внутренние веб-сайты / ftp все серверы без аутентификации ( SPNEGO / GSSAPI) может быть выполнено только путем полной настройки внешнего веб-сервера (например, Apache), что вы делаете прямо сейчас.

screen shot 2018-02-27 at 8 37 57 pm
screen shot 2018-02-27 at 8 48 00 pm

@muhammadn мы используем службу единого входа на основе Kerberos под названием Stanford Webauth (mod_auth_webauth). Он позволяет входить в систему с помощью пароля (в браузере) (и устанавливает файл cookie, содержащий токен Kerberos для SSO), но не передает пароли пользователей службе - только в наш «WebKDC».

Разумеется, аутентификация должна выполняться Apache в этой настройке, но Zammad должен использовать переменную REMOTE_USER, чтобы разрешить работу любого из этих механизмов "webserver-auth" (или что-то подобное?), А также предоставить метод для взлома выйти из «цикла входа в систему», не полагаясь на проверку cookie, что кажется немного ненадежным.

@pikachuprof Я https://github.com/muhammadn/zammad/commit/7e8e01bff8226f2d74e80cbc307416db9bf2ac1d

Эта реализация официально не является функцией zammad, а предназначена только для того, чтобы вы могли опробовать библиотеку omniauth-kerberos. Вам не нужно настраивать apache с поддержкой kerberos, поскольку все будет обрабатывать Zammad (это реализация на уровне рельсов), и ему не потребуется REMOTE_USER в заголовке или даже mod_auth_webauth.

Все, что вам нужно, это правильно настроить krb5.conf.

пример:

[logging]
    default = FILE:/var/log/krb5.log

[libdefaults]
    default_realm = ZAMMAD.COM
    kdc_timesync = 1
    ccache_type = 4
    forwardable = true
    proxiable = true

[realms]
    ZAMMAD.COM = {
        kdc = kdc.zammad.com
        admin_server = kdc.zammad.com
        default_domain = zammad.com
    }

[domain_realm]
    .zammad.com = ZAMMAD.COM
    zammad.com = ZAMMAD.COM

Вы можете публиковать любые проблемы по этому поводу на https://github.com/muhammadn/zammad/issues вместо этого, поскольку это не официальная реализация.

Однако обратите внимание, что для входа в систему с помощью zammad вам необходимо указать область в верхнем регистре: например: [email protected]

Есть ли шанс, что мы сможем использовать существующие билеты Kerberos для аутентификации? Наши пользователи привыкли к такому удобному решению, и у меня нет возможности переключиться на zammad, пока я не получу настоящую работу SSO.

У меня такая же проблема. Мне удалось установить соединение SSO со стороны Apache (которое заполняет REMOTE_USER ) двумя методами (сертификат клиента SSL Kerberos и X509). И мои учетные записи пользователей хорошо заполнены с помощью плагина Zammad LDAP.

  • Как @EDVLeer, когда я достигаю /auth/sso я вижу логин пользователя в журнале apache (так что он работает), но я снова возвращаюсь на экран входа в систему.
  • Я пробовал писать в zammad/app/controllers/sessions_controller.rb ( @pikachuprof hack), но, как @EDVLeer , либо я поместил его не в то место, либо впоследствии код изменился, и теперь мы должны поместить это в другое место.
  • Я попробовал взломать @pikachuprof, чтобы не перенаправлять на / если есть файл cookie,
  • У меня сейчас нет идей: D

Так...

  • я должен активировать плагин или что-то еще в Zammad, чтобы он работал?
  • Это ошибка в коде? (Возможно, да, если нам нужно изменить исходный код)
  • URL /auth/sso все еще действителен в последних выпусках?
  • Или есть официальный документ о том, как реализовать SSO с Zammad?

Примечания:

Конфигурация для Kerberos

<Location "/auth/sso">
    Options FollowSymLinks
    AuthType        Kerberos
    AuthName        "My Name"
    KrbMethodNegotiate  On
    # 'Off' to force users having a valid kerberos ticket, and not prompting for a login/pass
    KrbMethodK5Passwd   Off
    KrbAuthRealms       MY-DOMAIN.FR
    Krb5KeyTab      /etc/krb5.keytab
    KrbLocalUserMapping On
    KrbServiceName      HTTP
    Require valid-user
</Location>

Конфигурация для сертификата X509 SSL

Примечание: вы должны добавить свой публичный сертификат CA (.crt) в свой файл Apache CA Bundle ( SSLCACertificateFile ), чтобы Apache мог проверить, в порядке ли сертификаты клиентов.

# Let this before <Location> to get the certificate at the first connect, and avoid SSL renegotiation
# when we now the real url
SSLVerifyClient     require
<Location "/auth/sso">
    Options FollowSymLinks
    SSLRequireSSL
    SSLVerifyDepth      1    # Depend of your config. Can be higher
    Require expr %{SSL_CLIENT_I_DN_CN} in {'MY CA NAME'}
    SSLOptions      +StdEnvVars
    # Get the 'firstname.lastname' part of the corporate email, and populate REMOTE_USER
    RewriteEngine       On
    RewriteCond     %{SSL:SSL_CLIENT_S_DN_Email} ^(.+)@.+$
    RewriteRule     .* - [E=REMOTE_USER:%1]
    RequestHeader set REMOTE_USER %{REMOTE_USER}e
</Location>

Я мог бы «решить» проблему SSO, я думаю, что это определенно не лучший способ, но он работает.

Моя среда - это последняя версия zammad (2.5) с Apache2 2.4 с Postgres. После настройки SSO с помощью mod_auth_kerb мне нужно сделать следующее.

Я настроил LDAP для синхронизации наших сотрудников. Я сопоставил SAMACOUNTNAME с именем пользователя. Например, мое имя пользователя Windows ist schman. Таким образом, я мог войти в систему с этим именем пользователя (не по электронной почте).

После этого я отредактировал файл sessions_controller.rb и добавил следующую строку (строка 173)

ENV['HTTP_REMOTE_USER']=request.env['HTTP_REMOTE_USER']

поэтому Заммад знает HTTP_REMOTE_USER. После этого логин не работает. Поскольку значение HTTP_REMOTE_USER теперь [email protected]. Чтобы исправить это, я добавляю следующую строку в свою конфигурацию vHost.

RequestHeader edit REMOTE_USER "@DOMAIN.AT" ""

После перезапуска (Apache2 и Zammad) я мог войти в систему через SSO с http://zammad.domain.at/auth/sso

Если кто-то говорит по-немецки, я должен написать небольшой пост в своем блоге .

@schmanat, как вы решили "цикл входа в систему" или вы позволяете пользователю использовать URL-адрес "/ auth / sso"?

На данный момент пользователи получают URL-адрес / auth / sso.

Но это следующее, в чем я хотел бы покопаться. Не сработал обходной путь вашего ответа несколькими комментариями выше (RewriteRule)?

Да, это так, но это довольно ненадежно.

Спасибо всем за вашу работу над этим и за документирование того, что вы сделали. К сожалению, я в недоумении. Как уже видели другие, я тоже перенаправляюсь на страницу входа после нажатия конечной точки «auth / sso». Вот все, что я сделал:

  • установлен Zammad на Debian 9 (растянуть)
  • настроенная интеграция ldap (сопоставлено samaccountname -> login )
  • подтвердил возможность входа в систему с именем пользователя / паролем AD
  • создал учетную запись службы в AD (просто называется zammad )
  • создана keytab, сопоставленная с сервисным аккаунтом zammad
  • настроенный клиент / область Kerberos (в /etc/krb5.conf )
  • проверенная среда Kerberos с kinit
  • проверил, что keytab работает (можно получить TGT от KDC)
  • настроил Apache2 vhost (как объяснил cohausz)
  • модифицированный sessions_controller.rb (как объяснил пикачупроф)
  • добавлено правило заголовка в конфигурацию vhost (как объяснил pikachuprof)

Я также пробовал решения, предлагаемые schmant, но, похоже, ничего не помогает.

Ниже мои журналы Apache2. Как видите, пользователь проходит через ... Как я могу убедиться, что переменные среды REMOTE_USER / HTTP_REMOTE_USER установлены правильно? Могу ли я попробовать какие-либо другие действия по устранению неполадок?

zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:23 -0500] "GET /auth/sso HTTP/1.1" 401 855 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - [email protected] [09/Aug/2018:09:39:23 -0500] "GET /auth/sso HTTP/1.1" 302 969 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:23 -0500] "GET / HTTP/1.1" 200 1757 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:23 -0500] "POST /api/v1/signshow HTTP/1.1" 200 15874 "https://zammad.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:24 -0500] "GET /api/v1/translations/lang/en-us?_=1533825563736 HTTP/1.1" 200 720 "https://zammad.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36"
zammad.example.com:443 10.1.4.197 - - [09/Aug/2018:09:39:24 -0500] "GET /assets/images/fed16b83d2e87ea36cea961d6d8a2101.png HTTP/1.1" 304 210 "https://zammad.example.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36" 

Привет,

у меня та же ошибка, что и у @ jeremyj563.

Есть ли какое-нибудь решение для входа в систему с помощью SSO?

Спасибо за ответ

Меня тоже интересует SSO.

Можно было бы реализовать Azure AD для единого входа.

Нам тоже очень интересно. В настоящее время я тестирую приложение в Центре приложений тестирования Univention и очень рад.

Извините за то, что вас огорчили: не будет работать на univention, так как docker compose использует nginx.

ВНИМАНИЕ : Мы должны предупредить вас, чтобы вы использовали реализацию SSO любым способом, описанным в этой или других проблемах. Представленные здесь изменения содержат серьезную уязвимость в системе безопасности. Эта уязвимость сохранит сеансы, созданные через систему единого входа для пользователей, не прошедших проверку подлинности. Это означает, что неаутентифицированные пользователи могут взять на себя ранее созданный сеанс единого входа для пользователя (в контексте Zammad).

Мы настоятельно рекомендуем отключить систему единого входа, пока эта проблема не будет решена.

Однако хорошей новостью является то, что мы начали работу над официальной реализацией SSO.

Благодаря @rlue, система единого входа наконец-то develop ! Через несколько недель он станет частью грядущего релиза 3.2. Обратите внимание, что обновление экземпляров Zammad с использованием ветки develop в настоящее время не работает. Мы над этим работаем. Однако вы можете протестировать SSO в новой (тестовой) системе Zammad.

@MrGeneration, не могли бы вы расширить документацию, чтобы охватить конфигурацию единого входа в следующий свободный временной интервал?

Было продолжение. Обратите внимание на фиксацию выше.

К сожалению, мы сталкиваемся с некоторыми препятствиями при создании документации 😞 Мы будем очень признательны за участие в форме запроса на включение в https://github.com/zammad/zammad-admin-documentation .
Конечная точка API: /auth/sso . Мы ожидаем, что будет присутствовать одно из следующего и содержать атрибут login пользователя:

  • ENV REMOTE_USER
  • ENV HTTP_REMOTE_USER
  • Заголовок X-Forwarded-User

Дайте мне знать, если у вас возникнут вопросы. Я с радостью отвечу на них.

Закрытие сейчас.

Для полноты: документация по SSO в настоящее время проходит проверку качества.
https://github.com/zammad/zammad-documentation/pull/147

Была ли эта страница полезной?
0 / 5 - 0 рейтинги