Zammad: Sistem Masuk Tunggal

Dibuat pada 20 Jun 2017  ·  30Komentar  ·  Sumber: zammad/zammad

Informasi:

  • Versi Zammad bekas: terbaru
  • Sumber instalasi Zammad bekas: rpm
  • Sistem operasi: CentOS 7
  • Browser + versi: Firefox terbaru

Ini adalah pertanyaan tentang Single Sign On. Kami menggunakan Microsoft Active Directory di perusahaan kami dan login berfungsi dengan baik dengan ldap-sync.
Saya bertanya-tanya apakah SSO mungkin. Saya sudah mencoba mengaturnya menggunakan nginx, tetapi tidak berhasil :-(

Apakah ada cara mudah untuk melakukannya? Mungkin salah satu dari Anda sudah menyiapkan Zammad dengan SSO? Akan lebih baik jika seseorang memiliki instruksi atau beberapa contoh bagaimana menerapkannya.

Terima kasih sebelumnya.

authentication documentation feature backlog prioritised by payment verified

Komentar yang paling membantu

Sistem masuk tunggal akhirnya masuk ke develop berkat @rlue ! Ini akan menjadi bagian dari rilis 3.2 yang akan datang dalam beberapa minggu. Harap dicatat bahwa pembaruan instans Zammad menggunakan cabang develop saat ini rusak. Kami sedang mengerjakannya. Namun, Anda dapat menguji SSO di sistem Zammad (pengujian) baru.

@MrGeneration dapatkah Anda memperpanjang dokumentasi untuk mencakup konfigurasi SSO di slot waktu luang Anda berikutnya?

Semua 30 komentar

Hai @jaeger13 ,

Hal ini tentu saja mungkin. Tetapi Anda harus menggunakan Apache httpd dengan mod_auth_kerb, dengan konfigurasi seperti ini:

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

Bergantung pada atribut uid yang dipilih (ist sAMAccountName dalam contoh di atas) itu akan berfungsi di luar kotak.

Dan Anda harus mengonfigurasi Apache sebagai proxy terbalik alih-alih nginx.

Selama modul auth mengembalikan nama pengguna yang diautentikasi dalam variabel lingkungan REMOTE_USER atau HTTP_REMOTE_USER, dimungkinkan untuk menggunakan modul lain seperti auth_mellon dll.

hth, Roy

Hai @rkaldung ,

terima kasih atas jawaban cepat Anda. Saya akan mencobanya dengan Apache dan instruksi Anda :-)
Meskipun saya berharap akan ada cara untuk melakukannya dengan nginx :-(

Terima kasih!

Hai @jaeger13 ,

Ada cara dengan nginx, tetapi tanpa pengujian saat ini. @martini Dua sen Anda untuk ini?

Hai @rkaldung

Bisakah Anda menjelaskan caranya dengan NGINX? Itu juga akan sangat menarik bagi saya. Terima kasih.

Hai @scimitar4444

@rkaldung berarti implementasi pada level https://github.com/jgraichen/omniauth-kerberos - tetapi ini perlu diimplementasikan di Zammad terlebih dahulu. 🤖

-Martin

@martini Selalu hanya satu komit

Saya telah mencoba agar SSO berfungsi menggunakan instruksi Anda. Namun browsing http://myserver.mydom.local/auth/sso membawa saya kembali ke halaman login. . . apakah saya melewatkan sesuatu?

Mencoba menggunakan (Stanford) Webauth (dan pengguna ldap) menghasilkan kesalahan yang sama, setelah berhasil masuk di SSO saya mendapatkan zammad Prompt untuk masuk.
Menggunakan: Ubuntu 16.04; Zammad 2.2.0; Apache, MariaDB; (REMOTE_USER disetel oleh webauth)

@rkaldung apakah Anda tahu sth. baru?

Menemukan solusi:

Masalah: Modul yang dibutuhkan di lib/sso/env.rb dipanggil tanpa request.env yang dibutuhkan dari PUMA, jadi 'REMOTE_USER' tidak tersedia.

Solusi:
Tambahkan 'REMOTE_USER' dari request.env ke ENV di 'zammad/app/controllers/sessions_controller.rb' di dalam fungsi '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 mungkinkah ini masalah dengan versi PUMA yang lebih baru?

EDIT: Anda harus menambahkan aturan yang sesuai untuk mengatur bidang header di httpd.conf agar berfungsi:

RequestHeader merge REMOTE_USER %{REMOTE_USER}s

Sunting 2018-01-08:
Semuanya berfungsi sekarang dengan solusi dari pikachuprof. Itu salah ketik di /etc/krb5.conf Config.

Informasi:
Versi Zammad bekas: terbaru
Sumber instalasi Zammad bekas: rpm
Sistem operasi: CentOS 7
Browser + versi: Firefox terbaru

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>

Ketika saya membuka https:// /auth/sso dan "KrbLocalUserMapping on" browser saya menunjukkan kesalahan berikut:Kesalahan server dari dalamServer mengalami kesalahan internal atau kesalahan konfigurasi dan tidak dapat menyelesaikan permintaan Anda.Silakan hubungi administrator server di admin@ untuk memberi tahu mereka tentang waktu kesalahan ini terjadi, dan tindakan yang Anda lakukan sebelum kesalahan ini.
Informasi lebih lanjut tentang kesalahan ini mungkin tersedia di log kesalahan server.

Jika saya menonaktifkan "KrbLocalUserMapping" browser saya dialihkan ke https:// * /#login

Saya mencoba mengatur "RequestHeader merge REMOTE_USER %{REMOTE_USER}s" tetapi tidak ada yang berubah.

Berharap seseorang dapat membantu!

Kami telah menambahkan solusi kecil lainnya:

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

Baris-baris ini di Apache-config mengarahkan '/' ke '/auth/sso' hanya selama tidak ada cookie zammad yang disetel. Ini memungkinkan pengalihan ke halaman login SSO tanpa membuat loop tak berujung yang mengakibatkan 'Kesalahan Server Internal'.

Sepertinya saya tidak bisa membuatnya bekerja. . . log apache menunjukkan nama pengguna saya untuk /auth/sso kemudian permintaan saya dialihkan ke / dan nama pengguna saya hilang. . . mungkin saya melakukan kesalahan dalam mengedit fungsi create_sso!? Dapatkah seseorang memberi saya petunjuk?

@pikachuprof Saya telah mengerjakan implementasi menggunakan omniauth-kerberos .

Namun, implementasi saya mengharuskan Anda untuk login setiap kali Anda ingin mengakses Zammad (tentu saja menggunakan kredensial Kerberos Anda) daripada menggunakan "tiket kerberos" yang sudah dibuat oleh mesin pengguna. (mis. dari kinit atau "klien tiket kerberos lainnya")

Saya harap ini baik-baik saja untuk login dasar menggunakan kerberos untuk menghindari situasi peretasan. 😊

Meskipun saya merasa bahwa untuk konfigurasi lanjutan dengan 'satu kali login/otentikasi' (misalnya menggunakan kinit sekali dan mengotentikasi) dan kemudian Anda ssh/login ke zammad/situs web internal/ftp semua server tanpa mengautentikasi lagi ( SPNEGO/GSSAPI) hanya dapat dilakukan dengan sepenuhnya mengkonfigurasi webserver frontend (seperti Apache) yang Anda lakukan sekarang.

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

@muhammadn kami menggunakan Layanan Single-Sign-On berbasis Kerberos yang disebut Stanford Webauth (mod_auth_webauth). Ini memungkinkan login melalui kata sandi (di browser) (dan menetapkan cookie yang berisi Kerberos-Token untuk SSO) tetapi tidak mentransfer kata sandi pengguna ke layanan - hanya ke 'WebKDC' kami.

Otentikasi harus dilakukan oleh Apache dalam pengaturan ini tentu saja - tetapi Zammad harus menggunakan variabel REMOTE_USER untuk memungkinkan salah satu mekanisme "server-auth" bekerja (atau sth. serupa?), serta menyediakan metode untuk memecahkan keluar dari "loop masuk" tanpa mengandalkan pemeriksaan cookie, yang tampaknya sedikit tidak dapat diandalkan.

@pikachuprof Saya telah mendorong implementasi saya di https://github.com/muhammadn/zammad/commit/7e8e01bff8226f2d74e80cbc307416db9bf2ac1d

Implementasi tersebut bukanlah fitur zammad secara resmi tetapi hanya untuk Anda coba menggunakan library omniauth-kerberos. Anda tidak perlu mengonfigurasi Apache dengan dukungan kerberos karena semuanya akan ditangani oleh Zammad (ini adalah implementasi tingkat rel) dan tidak memerlukan REMOTE_USER di header atau bahkan mod_auth_webauth.

Yang Anda butuhkan hanyalah mengatur krb5.conf Anda dengan benar.

contoh:

[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

Anda dapat memposting masalah apa pun tentang itu di https://github.com/muhammadn/zammad/issues sebagai gantinya karena ini bukan implementasi resmi.

Namun, perhatikan bahwa untuk masuk dengan zammad Anda harus memiliki ranah dalam huruf besar: misalnya: [email protected]

Adakah kemungkinan kami dapat menggunakan tiket kerberos yang ada untuk otentikasi ? Pengguna kami terbiasa dengan solusi yang begitu nyaman dan saya tidak punya kesempatan untuk beralih ke zammad sampai SSO saya benar-benar berfungsi.

Masalah yang sama bagi saya. Saya berhasil membuat koneksi SSO dari sisi Apache (yang mengisi REMOTE_USER ) dengan 2 metode (sertifikat Klien SSL Kerberos & X509). Dan akun pengguna saya terisi dengan baik, dengan plugin Zammad LDAP.

  • Sebagai @EDVLeer ketika saya mencapai /auth/sso Saya melihat pengguna login di log apache (sehingga berfungsi), tetapi saya kembali ke layar login lagi.
  • Saya mencoba peretasan penulisan di zammad/app/controllers/sessions_controller.rb ( @pikachuprof hack), tetapi sebagai @EDVLeer , entah saya meletakkannya di tempat yang salah, kodenya berubah sesudahnya dan kita harus meletakkannya di tempat lain sekarang.
  • Saya mencoba peretasan @pikachuprof untuk tidak mengarahkan ke / jika ada cookie, tidak berhasil
  • Saya sekarang kehabisan ide :D

Jadi...

  • haruskah saya mengaktifkan plugin atau sesuatu di Zammad untuk membuatnya berfungsi?
  • Apakah itu bug dalam kode? (Mungkin ya, jika kita harus mengubah kode sumber)
  • Apakah url /auth/sso masih valid di rilis terbaru?
  • Atau adakah dokumen resmi tentang cara mengimplementasikan SSO dengan Zammad?

Catatan:

Konfigurasi untuk 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>

Konfigurasi untuk sertifikat SSL X509

Catatan: Anda harus menambahkan sertifikat publik CA Anda (.crt) di file 'CA Bundle' Apache Anda ( SSLCACertificateFile ) sehingga Apache dapat memeriksa apakah sertifikat klien OK

# 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>

Saya dapat "menyelesaikan" Masalah SSO, saya pikir ini jelas bukan cara yang sempurna tetapi berhasil.

Lingkungan saya adalah versi zammad terbaru (2.5) dengan Apache2 2.4 dengan Postgres. Setelah konfigurasi SSO dengan mod_auth_kerb saya harus melakukan hal-hal berikut.

Saya mengonfigurasi LDAP untuk menyinkronkan karyawan kami. Saya memetakan SAMACOUNTNAME ke nama login. Misalnya Nama Pengguna Windows saya ist schman. Jadi saya bisa masuk dengan nama pengguna ini (bukan dengan email).

Setelah itu saya edit session_controller.rb dan tambahkan baris berikut (pada baris 173)

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

jadi Zammad tahu HTTP_REMOTE_USER. Setelah itu login tidak berfungsi. Karena nilai HTTP_REMOTE_USER sekarang adalah [email protected]. Untuk memperbaikinya saya menambahkan baris berikut ke konfigurasi vHost saya.

RequestHeader edit REMOTE_USER "@DOMAIN.AT" ""

Setelah Restart (Apache2 dan Zammad) saya bisa login vis SSO dengan http://zammad.domain.at/auth/sso

Jika seseorang berbicara bahasa jerman, saya telah menulis sedikit posting di blog saya.

@schmanat bagaimana Anda memecahkan "loop masuk" atau apakah Anda membiarkan pengguna menggunakan URL "/ auth/sso"?

Untuk saat ini, pengguna mendapatkan url /auth/sso.

Tapi ini adalah hal berikutnya yang ingin saya gali. Tidak berhasil mengatasi jawaban Anda beberapa komentar di atas (RewriteRule)?

Ya itu, tapi itu sangat tidak bisa diandalkan.

Terima kasih semuanya atas pekerjaan Anda dalam hal ini dan untuk mendokumentasikan apa yang telah Anda lakukan. Sayangnya saya bingung. Seperti yang dialami orang lain, saya juga dialihkan ke halaman login setelah mencapai titik akhir "auth/sso". Inilah semua yang telah saya lakukan:

  • menginstal Zammad di Debian 9 (peregangan)
  • integrasi ldap yang dikonfigurasi (dipetakan samaccountname -> login )
  • dikonfirmasi dapat masuk dengan nama pengguna/kata sandi AD
  • membuat akun layanan di AD (cukup disebut zammad )
  • keytab yang dibuat dipetakan ke akun layanan zammad
  • klien/realm kerberos yang dikonfigurasi (dalam /etc/krb5.conf )
  • lingkungan kerberos terverifikasi dengan kinit
  • memverifikasi bahwa keytab berfungsi (bisa mendapatkan TGT dari KDC)
  • dikonfigurasi Apache2 vhost (seperti yang dijelaskan oleh cohausz)
  • dimodifikasi sessions_controller.rb (seperti yang dijelaskan oleh pikachuprof)
  • menambahkan aturan header ke konfigurasi vhost (seperti yang dijelaskan oleh pikachuprof)

Saya juga mencoba solusi yang ditawarkan oleh schmant tetapi sepertinya tidak ada yang membantu.

Di bawah ini adalah log Apache2 saya. Seperti yang Anda lihat pengguna sedang melewati... Bagaimana saya bisa memverifikasi bahwa variabel lingkungan REMOTE_USER / HTTP_REMOTE_USER disetel dengan benar? Apakah ada langkah pemecahan masalah lain yang bisa saya coba?

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" 

Halo yang disana,

saya memiliki kesalahan yang sama dengan @ jeremyj563.

Apakah ada solusi untuk login dengan SSO?

Terima kasih atas balasannya

Saya juga tertarik dengan SSO.

Ini akan menjadi opsi untuk mengimplementasikan Azure AD untuk SSO.

Kami juga sangat tertarik. Saat ini saya sedang menguji aplikasi di Pusat Aplikasi Uji Univention dan saya sangat senang.

Maaf telah mengganggu Anda: Tidak akan berfungsi pada univention, karena komposisi buruh pelabuhan menggunakan nginx.

PERHATIAN : Kami harus memperingatkan Anda untuk menggunakan implementasi SSO dengan cara apa pun yang dijelaskan dalam masalah ini atau lainnya. Perubahan yang disediakan di sini mengandung kerentanan keamanan yang serius. Kerentanan ini akan mempertahankan sesi yang dibuat melalui SSO untuk pengguna yang tidak diautentikasi. Artinya, pengguna yang tidak diautentikasi dapat mengambil alih sesi SSO yang dibuat sebelumnya untuk pengguna (dalam konteks Zammad).

Kami sangat menyarankan untuk menonaktifkan SSO hingga masalah ini teratasi.

Namun, kabar baiknya adalah kami mulai mengerjakan implementasi SSO resmi.

Sistem masuk tunggal akhirnya masuk ke develop berkat @rlue ! Ini akan menjadi bagian dari rilis 3.2 yang akan datang dalam beberapa minggu. Harap dicatat bahwa pembaruan instans Zammad menggunakan cabang develop saat ini rusak. Kami sedang mengerjakannya. Namun, Anda dapat menguji SSO di sistem Zammad (pengujian) baru.

@MrGeneration dapatkah Anda memperpanjang dokumentasi untuk mencakup konfigurasi SSO di slot waktu luang Anda berikutnya?

Ada tindak lanjut. Harap perhatikan komit di atas.

Sayangnya kami menghadapi beberapa kendala dalam membuat dokumentasi Sumbangan dalam bentuk Pull Request ke https://github.com/zammad/zammad-admin-documentation akan sangat kami hargai.
Titik akhir API adalah /auth/sso . Kami mengharapkan salah satu dari berikut ini ada dan berisi atribut login dari pengguna:

  • ENV REMOTE_USER
  • ENV HTTP_REMOTE_USER
  • Tajuk X-Forwarded-User

Beri tahu saya jika Anda memiliki pertanyaan. Saya senang untuk menjawab mereka.

Tutup sekarang.

Untuk kelengkapan: Dokumentasi SSO saat ini sedang menjalani QA.
https://github.com/zammad/zammad-documentation/pull/147

Apakah halaman ini membantu?
0 / 5 - 0 peringkat