Zammad: ์‹ฑ๊ธ€ ์‚ฌ์ธ์˜จ

์— ๋งŒ๋“  2017๋…„ 06์›” 20์ผ  ยท  30์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: zammad/zammad

์ •๋ณด:

  • ์ค‘๊ณ  Zammad ๋ฒ„์ „: ์ตœ์‹ 
  • ์‚ฌ์šฉ๋œ Zammad ์„ค์น˜ ์†Œ์Šค: rpm
  • ์šด์˜ ์ฒด์ œ: CentOS 7
  • ๋ธŒ๋ผ์šฐ์ € + ๋ฒ„์ „: Firefox ์ตœ์‹ 

์‹ฑ๊ธ€ ์‚ฌ์ธ์˜จ์— ๊ด€ํ•œ ์งˆ๋ฌธ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ํšŒ์‚ฌ์—์„œ Microsoft Active Directory๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋กœ๊ทธ์ธ์€ ldap-sync๋กœ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
SSO๊ฐ€ ๊ฐ€๋Šฅํ•œ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฏธ nginx๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค :-(

์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‚˜์š”? ์—ฌ๋Ÿฌ๋ถ„ ์ค‘ ํ•œ ๋ช…์ด ์ด๋ฏธ SSO๋กœ Zammad๋ฅผ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๊นŒ? ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ทธ๊ฒƒ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‚˜ ์ง€์นจ์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฏธ๋ฆฌ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

authentication documentation feature backlog prioritised by payment verified

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

@rlue ๋•๋ถ„์— SSO(Single Sign-On)๊ฐ€ ๋งˆ์นจ๋‚ด develop ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค ! ๋ช‡ ์ฃผ ์•ˆ์— ๊ณง ์ถœ์‹œ๋  3.2 ๋ฆด๋ฆฌ์Šค์˜ ์ผ๋ถ€๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. develop ๋ถ„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Zammad ์ธ์Šคํ„ด์Šค์˜ ์—…๋ฐ์ดํŠธ๋Š” ํ˜„์žฌ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒˆ๋กœ์šด Zammad(ํ…Œ์ŠคํŠธ) ์‹œ์Šคํ…œ์—์„œ SSO๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@MrGeneration ๋‹ค์Œ ์ž์œ  ์‹œ๊ฐ„์— SSO ๊ตฌ์„ฑ์„ ๋‹ค๋ฃจ๋„๋ก ๋ฌธ์„œ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ชจ๋“  30 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @jaeger13 ์ž…๋‹ˆ๋‹ค .

์ด๊ฒƒ์€ ๋ฌผ๋ก  ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ตฌ์„ฑ์œผ๋กœ mod_auth_kerb์™€ ํ•จ๊ป˜ Apache httpd๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<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 ๋“ฑ๊ณผ ๊ฐ™์€ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ—‰, ๋กœ์ด

์•ˆ๋…•ํ•˜์„ธ์š” @rkaldung ,

๋น ๋ฅธ ๋‹ต๋ณ€ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” Apache์™€ ๋‹น์‹ ์˜ ์ง€์‹œ์— ๊ทธ๊ฒƒ์„ ์‹œ๋„ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค :-)
nginx๋กœ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž์ง€๋งŒ :-(

๊ฐ์‚ฌ ํ•ด์š”!

์•ˆ๋…•ํ•˜์„ธ์š” @jaeger13 ์ž…๋‹ˆ๋‹ค .

nginx๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์ง€๋งŒ ํ˜„์žฌ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. @martini ์ด๊ฒƒ์— 2์„ผํŠธ?

์•ˆ๋…•ํ•˜์„ธ์š” @rkaldung

NGINX๋กœ ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ๋„ ๋งค์šฐ ํฅ๋ฏธ๋กœ์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”.

์•ˆ๋…•ํ•˜์„ธ์š” @scimitar4444

@rkaldung ์€ https://github.com/jgraichen/omniauth-kerberos ์™€ ๊ฐ™์€ ๋ ˆ์ผ ์ˆ˜์ค€์—์„œ์˜ ๊ตฌํ˜„์„ ์˜๋ฏธํ•˜์ง€๋งŒ ๋จผ์ € Zammad์—์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿค–

-๋‚จ์ž ์ด๋ฆ„

@martini ํ•ญ์ƒ ํ•œ ๋ฒˆ๋งŒ ์ปค๋ฐ‹ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค ๐Ÿ˜œ

๋‚˜๋Š” ๋‹น์‹ ์˜ ์ง€์‹œ์— ๋”ฐ๋ผ SSO๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ๋…ธ๋ ฅํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ http://myserver.mydom.local/auth/sso๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉด ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค. . . ๋‚ด๊ฐ€ ๋ญ”๊ฐ€๋ฅผ ๋†“์น˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

(Stanford) Webauth(๋ฐ ldap ์‚ฌ์šฉ์ž)๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. SSO์— ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๊ทธ์ธํ•œ ํ›„ ๋กœ๊ทธ์ธํ•˜๋ผ๋Š” zammad ํ”„๋กฌํ”„ํŠธ๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
์‚ฌ์šฉ: ์šฐ๋ถ„ํˆฌ 16.04; ์ž๋งˆ๋“œ 2.2.0; ์•„ํŒŒ์น˜, ๋งˆ๋ฆฌ์•„DB; (REMOTE_USER๋Š” webauth์— ์˜ํ•ด ์„ค์ •๋จ)

@rkaldung ๋‹น์‹ ์€ sth๋ฅผ ์•Œ๊ณ 

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

๋ฌธ์ œ์ : lib/sso/env.rb์— ์žˆ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“ˆ์ด PUMA์—์„œ ํ•„์š”ํ•œ request.env ์—†์ด ํ˜ธ์ถœ๋˜์–ด 'REMOTE_USER'๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
'create_sso' ํ•จ์ˆ˜ ๋‚ด 'zammad/app/controllers/sessions_controller.rb'์˜ ENV์— request.env์˜ 'REMOTE_USER'๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

   # 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 ์ˆ˜์ •:
์ด์ œ pikachuprof์˜ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. /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 off"๋ฅผ ์„ค์ •ํ•˜๋ฉด ๋‚ด ๋ธŒ๋ผ์šฐ์ €๊ฐ€ https:// * /#login์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค.

"RequestHeader ๋ณ‘ํ•ฉ REMOTE_USER %{REMOTE_USER}s"๋ฅผ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•˜์ง€๋งŒ ์•„๋ฌด ๊ฒƒ๋„ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๋„์šธ ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค!

๋˜ ๋‹ค๋ฅธ ์ž‘์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

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

Apache-config์˜ ์ด๋Ÿฌํ•œ ํ–‰์€ zammad ์ฟ ํ‚ค๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ์—๋งŒ '/'๋ฅผ '/auth/sso'๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด '๋‚ด๋ถ€ ์„œ๋ฒ„ ์˜ค๋ฅ˜'๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๋ฌดํ•œ ๋ฃจํ”„๋ฅผ ์ƒ์„ฑํ•˜์ง€ ์•Š๊ณ  SSO ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. . . ์•„ํŒŒ์น˜ ๋กœ๊ทธ๋Š” /auth/sso์— ๋Œ€ํ•œ ๋‚ด ์‚ฌ์šฉ์ž ์ด๋ฆ„์„ ํ‘œ์‹œํ•˜๊ณ  ๋‚ด ์š”์ฒญ์€ /๋กœ ๋ฆฌ๋””๋ ‰์…˜๋˜๊ณ  ๋‚ด ์‚ฌ์šฉ์ž ์ด๋ฆ„์€ ์‚ฌ๋ผ์ง‘๋‹ˆ๋‹ค. . . ๋‚ด๊ฐ€ create_sso ํ•จ์ˆ˜๋ฅผ ํŽธ์ง‘ํ•  ๋•Œ ์‹ค์ˆ˜๋ฅผ ํ–ˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!? ๋ˆ„๊ตฐ๊ฐ€ ๋‚˜์—๊ฒŒ ํžŒํŠธ๋ฅผ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@pikachuprof ์ €๋Š” omniauth-kerberos๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ตฌํ˜„ ์ž‘์—…์„ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‚ด ๊ตฌํ˜„์—์„œ๋Š” ์‚ฌ์šฉ์ž ์ปดํ“จํ„ฐ์—์„œ ์ด๋ฏธ ์ƒ์„ฑ๋œ "kerberos ํ‹ฐ์ผ“"์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  Zammad์— ์•ก์„ธ์Šคํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋งˆ๋‹ค(๋ฌผ๋ก  Kerberos ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ) ๋กœ๊ทธ์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: kinit ๋˜๋Š” ๊ธฐํƒ€ "kerberos ํ‹ฐ์ผ“ํŒ… ํด๋ผ์ด์–ธํŠธ"์—์„œ)

ํ•ดํ‚น ์ƒํ™ฉ์„ ํ”ผํ•˜๊ธฐ ์œ„ํ•ด kerberos๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋ณธ ๋กœ๊ทธ์ธ์— ์ ํ•ฉํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๐Ÿ˜Š

'์ผํšŒ์„ฑ ๋กœ๊ทธ์ธ/์ธ์ฆ'์ด ํฌํ•จ๋œ ๊ณ ๊ธ‰ ๊ตฌ์„ฑ(์˜ˆ: kinit ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•˜๊ณ  ์ธ์ฆ)์˜ ๊ฒฝ์šฐ ๋” ์ด์ƒ ์ธ์ฆํ•˜์ง€ ์•Š๊ณ  zammad/๋‚ด๋ถ€ ์›น์‚ฌ์ดํŠธ/ftp ๋ชจ๋“  ์„œ๋ฒ„์— ssh/๋กœ๊ทธ์ธํ•ฉ๋‹ˆ๋‹ค( SPNEGO/GSSAPI)๋Š” ํ˜„์žฌ ์ˆ˜ํ–‰ ์ค‘์ธ ํ”„๋ก ํŠธ์—”๋“œ ์›น์„œ๋ฒ„(Apache์™€ ๊ฐ™์€)๋ฅผ ์™„์ „ํžˆ ๊ตฌ์„ฑํ•ด์•ผ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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

@muhammadn ์šฐ๋ฆฌ๋Š” Stanford Webauth(mod_auth_webauth)๋ผ๋Š” Kerberos ๊ธฐ๋ฐ˜ ์‹ฑ๊ธ€ ์‚ฌ์ธ์˜จ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ํ†ตํ•œ ๋กœ๊ทธ์ธ์„ ํ—ˆ์šฉํ•˜๊ณ  SSO์šฉ Kerberos-Token์ด ํฌํ•จ๋œ ์ฟ ํ‚ค๋ฅผ ์„ค์ •ํ•˜์ง€๋งŒ ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์„œ๋น„์Šค๋กœ ์ „์†กํ•˜์ง€ ์•Š๊ณ  'WebKDC'๋กœ๋งŒ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ์ด ์„ค์ •์—์„œ ์ธ์ฆ์€ Apache์— ์˜ํ•ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜์ง€๋งŒ Zammad๋Š” REMOTE_USER ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋Ÿฌํ•œ "webserver-auth" ๋ฉ”์ปค๋‹ˆ์ฆ˜์ด ์ž‘๋™ํ•˜๋„๋ก(๋˜๋Š” ์œ ์‚ฌํ•˜๊ฒŒ?) ํ—ˆ์šฉํ•˜๊ณ  ์ฐจ๋‹จ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฟ ํ‚ค ๊ฒ€์‚ฌ์— ์˜์กดํ•˜์ง€ ์•Š๊ณ  "๋กœ๊ทธ์ธ ๋ฃจํ”„"์—์„œ ๋ฒ—์–ด๋‚˜๋Š”๋ฐ, ์ด๋Š” ์•ฝ๊ฐ„ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@pikachuprof https://github.com/muhammadn/zammad/commit/7e8e01bff8226f2d74e80cbc307416db9bf2ac1d ์—์„œ ๊ตฌํ˜„์„ ํ‘ธ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ตฌํ˜„์€ ๊ณต์‹์ ์œผ๋กœ zammad ๊ธฐ๋Šฅ์ด ์•„๋‹ˆ๋ผ omniauth-kerberos ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด๊ธฐ ์œ„ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด Zammad์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋˜๊ณ (๋ ˆ์ผ ์ˆ˜์ค€ ๊ตฌํ˜„์ž„) ํ—ค๋” ๋˜๋Š” mod_auth_webauth์— REMOTE_USER๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ kerberos ์ง€์›์œผ๋กœ ์•„ํŒŒ์น˜๋ฅผ ๊ตฌ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

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 ํ‹ฐ์ผ“์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์šฐ๋ฆฌ ์‚ฌ์šฉ์ž๋“ค์€ ์ด๋Ÿฌํ•œ ํŽธ์•ˆํ•œ ์†”๋ฃจ์…˜์— ์ต์ˆ™ํ•˜๋ฉฐ ์‹ค์ œ SSO๊ฐ€ ์ž‘๋™ํ•  ๋•Œ๊นŒ์ง€ zammad๋กœ ์ „ํ™˜ํ•  ๊ธฐํšŒ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋‚˜์—๊ฒŒ๋„ ๊ฐ™์€ ๋ฌธ์ œ. ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•(Kerberos ๋ฐ X509 SSL ํด๋ผ์ด์–ธํŠธ ์ธ์ฆ์„œ)์„ ์‚ฌ์šฉํ•˜์—ฌ Apache ์ธก( REMOTE_USER ์ฑ„์šฐ๊ธฐ)์—์„œ SSO ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚ด ์‚ฌ์šฉ์ž ๊ณ„์ •์€ Zammad LDAP ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ์ž˜ ์ฑ„์›Œ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.

  • @EDVLeer๋กœ /auth/sso ๋„๋‹ฌํ•˜๋ฉด ์•„ํŒŒ์น˜ ๋กœ๊ทธ์— ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ์ด ํ‘œ์‹œ๋˜์ง€๋งŒ(๊ทธ๋ž˜์„œ ์ž‘๋™ํ•จ) ๋กœ๊ทธ์ธ ํ™”๋ฉด์œผ๋กœ ๋‹ค์‹œ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.
  • ๋‚˜๋Š” ์“ฐ๊ธฐ์˜ ํ•ดํ‚น ์‹œ๋„ zammad/app/controllers/sessions_controller.rb (ํ•ดํ‚น @pikachuprof), ๊ทธ๋Ÿฌ๋‚˜ @EDVLeer๋กœ, ํ•˜๋‚˜ ๋‚˜๋Š” ์ž˜๋ชป๋œ ์žฅ์†Œ์— ๋„ฃ์–ด ๋‘ ์ฝ”๋“œ๋Š” ์ดํ›„ ๋ณ€๊ฒฝํ•˜๊ณ  ์šฐ๋ฆฌ๋Š” ์ง€๊ธˆ ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์–ด๋”˜๊ฐ€๋ฅผ ๋„ฃ์–ดํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚˜๋Š” ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜์ง€ ์•Š๋Š” @pikachuprof ํ•ดํ‚น์„ ์‹œ๋„ํ–ˆ๋‹ค / ์ฟ ํ‚ค๊ฐ€ ์žˆ๋‹ค๋ฉด ์šด์ด ์—†๋‹ค
  • ๋‚˜๋Š” ์ด์ œ ์•„์ด๋””์–ด๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค :D

๊ทธ๋ž˜์„œ...

  • ์ž‘๋™ํ•˜๋ ค๋ฉด Zammad์—์„œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๋ฌด์–ธ๊ฐ€๋ฅผ ํ™œ์„ฑํ™”ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?
  • ์ฝ”๋“œ์˜ ๋ฒ„๊ทธ์ž…๋‹ˆ๊นŒ? (์•„๋งˆ๋„ ์˜ˆ, ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ)
  • URL /auth/sso ์ด ์ตœ์‹  ๋ฆด๋ฆฌ์Šค์—์„œ ๊ณ„์† ์œ ํšจํ•ฉ๋‹ˆ๊นŒ?
  • ์•„๋‹ˆ๋ฉด Zammad๋กœ SSO๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๊ณต์‹ ๋ฌธ์„œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋…ธํŠธ:

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 ์ธ์ฆ์„œ ๊ตฌ์„ฑ

์ฐธ๊ณ : Apache 'CA ๋ฒˆ๋“ค' ํŒŒ์ผ( SSLCACertificateFile )์— CA ๊ณต๊ฐœ ์ธ์ฆ์„œ(.crt)๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ 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 ๋ฌธ์ œ๋ฅผ "ํ•ด๊ฒฐ"ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ™•์‹คํžˆ ์™„๋ฒฝํ•œ ๋ฐฉ๋ฒ•์€ ์•„๋‹ˆ์ง€๋งŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ํ™˜๊ฒฝ์€ Postgres๊ฐ€ ํฌํ•จ๋œ Apache2 2.4๊ฐ€ ํฌํ•จ๋œ ์ตœ์‹  zammad ๋ฒ„์ „(2.5)์ž…๋‹ˆ๋‹ค. mod_auth_kerb๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SSO๋ฅผ ๊ตฌ์„ฑํ•œ ํ›„ ๋‹ค์Œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง์›์„ ๋™๊ธฐํ™”ํ•˜๋„๋ก LDAP๋ฅผ ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. SAMACOUNTNAME์„ ๋กœ๊ทธ์ธ ์ด๋ฆ„์— ๋งคํ•‘ํ–ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋‚ด Windows ์‚ฌ์šฉ์ž ์ด๋ฆ„์€ schman์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ด ์‚ฌ์šฉ์ž ์ด๋ฆ„์œผ๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค(์ด๋ฉ”์ผ์ด ์•„๋‹˜).

๊ทธ ํ›„ session_controller.rb๋ฅผ ํŽธ์ง‘ํ•˜๊ณ  ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค(173๋ฒˆ ์ค„).

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

๊ทธ๋ž˜์„œ Zammad๋Š” HTTP_REMOTE_USER๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„ ๋กœ๊ทธ์ธ์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. HTTP_REMOTE_USER์˜ ๊ฐ’์ด ์ด์ œ [email protected]์ด๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด vHost ๊ตฌ์„ฑ์— ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

RequestHeader edit REMOTE_USER "@DOMAIN.AT" ""

๋‹ค์‹œ ์‹œ์ž‘ํ•œ ํ›„(Apache2 ๋ฐ Zammad) http://zammad.domain.at/auth/sso๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ SSO์— ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ˆ„๊ตฐ๊ฐ€ ๋…์ผ์–ด๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋‚ด ๋ธ”๋กœ๊ทธ ์— ์ž‘์€ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค.

@schmanat "login-loop"์„ ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๊นŒ? ์•„๋‹ˆ๋ฉด ์‚ฌ์šฉ์ž๊ฐ€ "/auth/sso" URL์„ ์‚ฌ์šฉํ•˜๋„๋ก ํ•ฉ๋‹ˆ๊นŒ?

ํ˜„์žฌ ์‚ฌ์šฉ์ž๋Š” /auth/sso url์„ ์–ป์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ํŒŒ๊ณ ๋“ค๊ณ  ์‹ถ์€ ๋‹ค์Œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์œ„์˜ ๋ช‡ ๊ฐ€์ง€ ์˜๊ฒฌ(RewriteRule)์— ๋Œ€ํ•œ ๋‹ต๋ณ€์— ๋Œ€ํ•œ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ?

์˜ˆ, ๊ทธ๋žฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ทธ๊ฒƒ์€ ๊ฝค ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ˆ˜ํ–‰ํ•œ ์ž‘์—…์„ ๋ฌธ์„œํ™”ํ•ด ์ฃผ์‹  ๋ชจ๋“  ๋ถ„๋“ค๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๋ถˆํ–‰ํžˆ๋„ ๋‚˜๋Š” ๊ธธ์„ ์žƒ์—ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๊ฒฝํ—˜ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ๋‚˜๋„ "auth/sso" ๋์ ์— ๋„๋‹ฌํ•œ ํ›„ ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€๋กœ ๋ฆฌ๋””๋ ‰์…˜๋ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•œ ๋ชจ๋“  ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • Debian 9(stretch)์— Zammad๋ฅผ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ตฌ์„ฑ๋œ ldap ํ†ตํ•ฉ(๋งคํ•‘๋œ samaccountname -> login )
  • AD ์‚ฌ์šฉ์ž ์ด๋ฆ„/๋น„๋ฐ€๋ฒˆํ˜ธ๋กœ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์Œ์„ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค.
  • AD์—์„œ ์ƒ์„ฑ๋œ ์„œ๋น„์Šค ๊ณ„์ •(๊ฐ„๋‹จํžˆ zammad ๋ผ๊ณ  ํ•จ)
  • zammad ์„œ๋น„์Šค ๊ณ„์ •์— ๋งคํ•‘๋œ ์ƒ์„ฑ๋œ keytab
  • ๊ตฌ์„ฑ๋œ kerberos ํด๋ผ์ด์–ธํŠธ/์˜์—ญ( /etc/krb5.conf )
  • kinit ๊ฒ€์ฆ๋œ kerberos ํ™˜๊ฒฝ
  • keytab์ด ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ–ˆ์Šต๋‹ˆ๋‹ค(KDC์—์„œ TGT๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Œ).
  • ๊ตฌ์„ฑ๋œ Apache2 ๊ฐ€์ƒ ํ˜ธ์ŠคํŠธ(cohausz์—์„œ ์„ค๋ช…)
  • ์ˆ˜์ •๋œ sessions_controller.rb (pikachuprof๊ฐ€ ์„ค๋ช…ํ•จ)
  • 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์— ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

SSO์šฉ Azure AD๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์˜ต์…˜์ž…๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋„ ๋งค์šฐ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ํ˜„์žฌ Univention Test App Center์—์„œ ์•ฑ์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋งค์šฐ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค.

๊ท€์ฐฎ๊ฒŒ ํ•ด์„œ ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. docker compose๊ฐ€ nginx๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— univention์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ฃผ์˜ : ์ด ๋ฌธ์ œ ๋˜๋Š” ๋‹ค๋ฅธ ๋ฌธ์ œ์— ์„ค๋ช…๋œ ๋ฐฉ์‹์œผ๋กœ SSO ๊ตฌํ˜„์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฒฝ๊ณ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์ œ๊ณต๋œ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์—๋Š” ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ์ทจ์•ฝ์ ์ด ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ์ทจ์•ฝ์ ์€ ์ธ์ฆ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด SSO๋ฅผ ํ†ตํ•ด ์ƒ์„ฑ๋œ ์„ธ์…˜์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ธ์ฆ๋˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉ์ž์— ๋Œ€ํ•ด ์ด์ „์— ์ƒ์„ฑ๋œ SSO ์„ธ์…˜์„ ์ธ์ˆ˜ํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค(Zamad ์ปจํ…์ŠคํŠธ์—์„œ).

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ SSO๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ข‹์€ ์†Œ์‹์€ ์šฐ๋ฆฌ๊ฐ€ ๊ณต์‹ SSO ๊ตฌํ˜„ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@rlue ๋•๋ถ„์— SSO(Single Sign-On)๊ฐ€ ๋งˆ์นจ๋‚ด develop ์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค ! ๋ช‡ ์ฃผ ์•ˆ์— ๊ณง ์ถœ์‹œ๋  3.2 ๋ฆด๋ฆฌ์Šค์˜ ์ผ๋ถ€๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค. develop ๋ถ„๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” Zammad ์ธ์Šคํ„ด์Šค์˜ ์—…๋ฐ์ดํŠธ๋Š” ํ˜„์žฌ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋…ธ๋ ฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ƒˆ๋กœ์šด Zammad(ํ…Œ์ŠคํŠธ) ์‹œ์Šคํ…œ์—์„œ SSO๋ฅผ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@MrGeneration ๋‹ค์Œ ์ž์œ  ์‹œ๊ฐ„์— SSO ๊ตฌ์„ฑ์„ ๋‹ค๋ฃจ๋„๋ก ๋ฌธ์„œ๋ฅผ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

ํ›„์† ์กฐ์น˜๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ปค๋ฐ‹์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

๋ถˆํ–‰ํ•˜๊ฒŒ๋„ ์šฐ๋ฆฌ๋Š” ๋ฌธ์„œ ๐Ÿ˜ž๋ฐ›๋Š” ๋Œ์–ด ์˜ค๊ธฐ ์š”์ฒญ์˜ ํ˜•ํƒœ๋กœ ๊ธฐ์—ฌ ๋งŒ๋“œ๋Š” ๋ช‡ ๊ฐ€์ง€ ์žฅ์• ๋ฌผ์— ์ง๋ฉด https://github.com/zammad/zammad-admin-documentation ๋†’๊ฒŒ ํ‰๊ฐ€ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.
API ์—”๋“œํฌ์ธํŠธ๋Š” /auth/sso ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ์กด์žฌํ•˜๊ณ  ์‚ฌ์šฉ์ž์˜ login ์†์„ฑ์„ ํฌํ•จํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ํ™˜๊ฒฝ REMOTE_USER
  • ํ™˜๊ฒฝ HTTP_REMOTE_USER
  • ํ—ค๋” X-Forwarded-User

์งˆ๋ฌธ์ด ์žˆ์œผ๋ฉด ์•Œ๋ ค์ฃผ์„ธ์š”. ๋‹ต๋ณ€์„ ๋“œ๋ฆฌ๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ๋‹ซ์Šต๋‹ˆ๋‹ค.

์™„์ „์„ฑ์„ ์œ„ํ•ด: SSO ๋ฌธ์„œ๋Š” ํ˜„์žฌ QA๋ฅผ ์ง„ํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
https://github.com/zammad/zammad-documentation/pull/147

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰