Zammad: シングル・サインオン

作成日 2017年06月20日  ·  30コメント  ·  ソース: zammad/zammad

情報:

  • 使用済みZammadバージョン:最新
  • 使用済みのZammadインストールソース:rpm
  • オペレーティングシステム:CentOS 7
  • ブラウザ+バージョン:Firefox最新

これはシングルサインオンに関する質問です。 社内でMicrosoftActive Directoryを使用しており、ログインはldap-syncで正常に機能します。
SSOが可能かどうか疑問に思っています。 私はすでにnginxを使用してセットアップしようとしましたが、機能しません:-(

それを行う簡単な方法はありますか? たぶんあなたの一人はすでにSSOでZammadをセットアップしていますか? 誰かがそれを実装する方法の指示またはいくつかの例を持っているなら、いいでしょう。

前もって感謝します。

authentication documentation feature backlog prioritised by payment verified

最も参考になるコメント

@rlueのおかげで、シングルサインオンがついにdevelop到達しました。 これは、数週間以内に次の3.2リリースの一部になります。 developブランチを使用したZammadインスタンスの更新は現在壊れていることに注意してください。 現在取り組んでいます。 ただし、新しいZammad(テスト)システムでSSOをテストすることはできます。

@MrGenerationは、次の空き時間帯のSSO構成をカバーするようにドキュメントを拡張していただけますか?

全てのコメント30件

こんにちは@ jaeger13

もちろんこれは可能です。 ただし、次のような設定で、mod_auth_kerbとともにApachehttpdを使用する必要があります。

<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ではなくリバースプロキシとして設定する必要があります。

認証モジュールが環境変数REMOTE_USERまたはHTTP_REMOTE_USERで認証されたユーザー名を返す限り、auth_mellonなどの他のモジュールを使用することができます。

hth、ロイ

ねえ@rkaldung

迅速な回答ありがとうございます。 Apacheとあなたの指示で試してみます:-)
私はnginxでそれを行う方法があることを望みましたが:-(

ありがとう!

こんにちは@ jaeger13

nginxを使用する方法はありますが、現時点ではテストしていません。 @martiniこれであなたの2セント?

こんにちは@rkaldung

NGINXでの方法を説明できますか? それも私にとって非常に興味深いことです。 ありがとう。

こんにちは@ scimitar4444

@rkaldungは、 https://github.com/jgraichen/omniauth-kerberosのようなRailsレベルでの実装を意味し

-マーティン

@martiniそれは常にたった1つのコミットです😜

私はあなたの指示を使用してSSOを機能させようとしています。 ただし、 http://myserver.mydom.local/auth/ssoを参照すると、ログインページに戻ります。 。 。 私は何かが足りないのですか?

(Stanford)Webauth(およびldapユーザー)を使用しようとすると、同じエラーが発生します。SSOに正常にログインした後、zammadプロンプトでログインします。
使用:Ubuntu 16.04; Zammad 2.2.0; Apache、MariaDB; (REMOTE_USERはwebauthによって設定されます)

@rkaldungあなたは

回避策が見つかりました:

問題:lib / sso / env.rb内の必要なモジュールが、PUMAからの必要なrequest.envなしで呼び出されるため、「REMOTE_USER」は使用できません。

回避策:
関数「create_sso」内の「zammad / app / controllers /sessions_controller.rb」のリクエスト.envから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を開いて


このエラーが発生した時刻と、このエラーの直前に実行したアクションについて
このエラーの詳細については、サーバーのエラーログを参照してください。

「KrbLocalUserMappingoff」を設定すると、ブラウザはhttps:// * /#loginにリダイレクトされます。

「RequestHeadermergeREMOTE_USER%{REMOTE_USER} s」を設定しようとしましたが、何も変わりません。

誰かが助けてくれることを願っています!

別の小さな回避策を追加しました:

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

Apache-configのこれらの行は、zammad cookieが設定されていない限り、「/」を「/ auth / sso」にリダイレクトします。 これにより、「内部サーバーエラー」が発生する無限ループを作成することなく、SSOログインページにリダイレクトできます。

私はそれを機能させることができないようです。 。 。 Apacheログには/ auth / ssoのユーザー名が表示され、リクエストは/にリダイレクトされ、ユーザー名は失われます。 。 。 create_sso関数の編集を間違えたのかもしれません!? 誰かが私にヒントを与えることができますか?

@pikachuprof私はomn​​iauth-kerberosを使用した実装に取り​​組んでいました。

ただし、私の実装では、ユーザーのマシンによって既に生成されている「Kerberosチケット」を使用する代わりに、Zammadにアクセスするたびに(もちろんKerberosクレデンシャルを使用して)ログインする必要があります。 (例: kinitまたはその他の「Kerberosチケットクライアント」から)

ハッキーな状況を回避するために、これがkerberosを使用した基本的なログインに適していることを願っています。 😊

「1回限りのログイン/認証」(たとえば、 kinit 1回使用して認証する)を使用した高度な構成の場合は、認証せずにすべてのサーバーをssh /ログインしてzammad /内部Webサイト/ ftpに接続します( SPNEGO / GSSAPI)は、現在実行しているフロントエンドWebサーバー(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トークンを含むCookieを設定します)が、ユーザーパスワードをサービスに転送せず、「WebKDC」にのみ転送します。

もちろん、このセットアップではApacheによって認証を行う必要がありますが、ZammadはREMOTE_USER変数を使用して、これらの「webserver-auth」メカニズムのいずれかが機能するようにし(または同様ですか?)、破壊するためのメソッドを提供する必要があります。少し信頼できないように見えるCookieのチェックに依存せずに「ログインループ」から抜け出します。

@pikachuprofhttps ://github.com/muhammadn/zammad/commit/7e8e01bff8226f2d74e80cbc307416db9bf2ac1dで実装をプッシュしました

この実装は、正式にはzammad機能ではありませんが、omniauth-kerberosライブラリを使用して試すためのものです。 すべてがZammadによって処理され(これはRailsレベルの実装です)、ヘッダーにREMOTE_USERやmod_auth_webauthさえも必要ないため、Kerberosサポートを使用してApacheを構成する必要はありません。

必要なのは、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に切り替える機会はありません。

私にとっても同じ問題です。 Apache側( REMOTE_USER )から2つの方法(KerberosとX509 SSLクライアント証明書)を使用してSSO接続を確立することができました。 そして、私のユーザーアカウントには、ZammadLDAPプラグインが十分に組み込まれています。

  • /auth/ssoに到達すると@EDVLeerとして、apacheログにユーザーログインが表示されます(これで機能します)が、ログイン画面に戻ります。
  • zammad/app/controllers/sessions_controller.rb@ pikachuprof hack)で書くハックを試しましたが、 @ EDVLeerとして、間違った場所に配置したか、後でコードが変更されたため、これを別の場所に配置する必要があります。
  • 私は@pikachuprofハックを試しましたが、Cookieがある場合は/にリダイレクトされませんでしたが、運がありませんでした
  • 私は今アイデアがありません: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>

X509SSL証明書の構成

注:Apacheがクライアント証明書に問題がないかどうかを確認できるように、Apacheの「CAバンドル」ファイル( SSLCACertificateFile )にCA公開証明書(.crt)を追加する必要があります。

# 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です。 したがって、このユーザー名でログインできます(電子メールではありません)。

その後、sessions_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)後、私はVIS SSOを使ってログインできhttp://zammad.domain.at/auth/sso

誰かがドイツ語を覗き見しているなら、私は私のブログに小さな投稿を書いています。

@schmanat 「login-loop」をどのように解決しましたか、それともユーザーに「/ auth / sso」URLを使用させましたか?

今のところ、ユーザーは/ auth / ssourlを取得します。

しかし、これは私が掘り下げたい次のことです。上記のいくつかのコメント(RewriteRule)であなたの答えの回避策を実行しませんでしたか?

はい、そうしましたが、かなり信頼性がありません。

これに取り組んでくれて、あなたがしたことを文書化してくれてありがとう。 残念ながら私は途方に暮れています。 他の人が経験したように、私も「auth / sso」エンドポイントに到達した後、ログインページにリダイレクトされています。 これが私がしたすべてです:

  • Debian 9にZammadをインストール(ストレッチ)
  • 構成されたLDAP統合(マップされたsamaccountname -> login
  • ADのユーザー名/パスワードでログインできることを確認
  • ADで作成されたサービスアカウント(単にzammadと呼ばれます)
  • zammadサービスアカウントにマップされたキータブを作成しました
  • 構成済みのKerberosクライアント/レルム( /etc/krb5.conf
  • kinit検証されたKerberos環境
  • キータブが機能していることを確認しました(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用のAzureADを実装するオプションになります。

私たちも非常に興味を持っています。 私は現在、Univention Test App Centerでアプリをテストしており、非常に興奮しています。

Dockerの作成にはnginxが使用されているため、ユニベンションには対応しません。

注意:この問題または他の問題で説明されている方法でSSO実装を使用するように警告する必要があります。 ここで提供される変更には、重大なセキュリティの脆弱性が含まれています。 この脆弱性は、認証されていないユーザーに対してSSOを介して作成されたセッションを持続させます。 これは、認証されていないユーザーが、以前に作成されたユーザーのSSOセッションを(Zammadコンテキストで)引き継ぐ可能性があることを意味します。

この問題が解決するまで、SSOを無効にすることを強くお勧めします。

ただし、良いニュースは、公式のSSO実装に取り​​組み始めたことです。

@rlueのおかげで、シングルサインオンがついにdevelop到達しました。 これは、数週間以内に次の3.2リリースの一部になります。 developブランチを使用したZammadインスタンスの更新は現在壊れていることに注意してください。 現在取り組んでいます。 ただし、新しいZammad(テスト)システムでSSOをテストすることはできます。

@MrGenerationは、次の空き時間帯のSSO構成をカバーするようにドキュメントを拡張していただけますか?

フォローアップがありました。 上記のコミットに注意してください。

残念ながら、私たちは、ドキュメント😞にプル要求の形で貢献作成するいくつかの障害に直面https://github.com/zammad/zammad-admin-documentation高く評価されるだろうし。
APIエンドポイントは/auth/ssoです。 次のいずれかが存在し、ユーザーのlogin属性が含まれていることが期待されます。

  • ENV REMOTE_USER
  • ENV HTTP_REMOTE_USER
  • ヘッダーX-Forwarded-User

ご不明な点がございましたら、お気軽にお問い合わせください。 喜んでお答えします。

閉会しました。

完全を期すために:SSOドキュメントは現在QAを受けています。
https://github.com/zammad/zammad-documentation/pull/147

このページは役に立ちましたか?
0 / 5 - 0 評価