これはシングルサインオンに関する質問です。 社内でMicrosoftActive Directoryを使用しており、ログインはldap-syncで正常に機能します。
SSOが可能かどうか疑問に思っています。 私はすでにnginxを使用してセットアップしようとしましたが、機能しません:-(
それを行う簡単な方法はありますか? たぶんあなたの一人はすでにSSOでZammadをセットアップしていますか? 誰かがそれを実装する方法の指示またはいくつかの例を持っているなら、いいでしょう。
前もって感謝します。
こんにちは@ 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私はomniauth-kerberosを使用した実装に取り組んでいました。
ただし、私の実装では、ユーザーのマシンによって既に生成されている「Kerberosチケット」を使用する代わりに、Zammadにアクセスするたびに(もちろんKerberosクレデンシャルを使用して)ログインする必要があります。 (例: kinit
またはその他の「Kerberosチケットクライアント」から)
ハッキーな状況を回避するために、これがkerberosを使用した基本的なログインに適していることを願っています。 😊
「1回限りのログイン/認証」(たとえば、 kinit
1回使用して認証する)を使用した高度な構成の場合は、認証せずにすべてのサーバーをssh /ログインしてzammad /内部Webサイト/ ftpに接続します( SPNEGO / GSSAPI)は、現在実行しているフロントエンドWebサーバー(Apacheなど)を完全に構成することによってのみ実行できます。
@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として、間違った場所に配置したか、後でコードが変更されたため、これを別の場所に配置する必要があります。そう...
/auth/sso
は最新リリースでも有効ですか?ノート:
<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>
注: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」エンドポイントに到達した後、ログインページにリダイレクトされています。 これが私がしたすべてです:
samaccountname
-> login
)zammad
と呼ばれます)zammad
サービスアカウントにマップされたキータブを作成しました/etc/krb5.conf
)kinit
検証されたKerberos環境sessions_controller.rb
(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
属性が含まれていることが期待されます。
REMOTE_USER
HTTP_REMOTE_USER
X-Forwarded-User
ご不明な点がございましたら、お気軽にお問い合わせください。 喜んでお答えします。
閉会しました。
完全を期すために:SSOドキュメントは現在QAを受けています。
https://github.com/zammad/zammad-documentation/pull/147
最も参考になるコメント
@rlueのおかげで、シングルサインオンがついに
develop
に到達しました。 これは、数週間以内に次の3.2リリースの一部になります。develop
ブランチを使用したZammadインスタンスの更新は現在壊れていることに注意してください。 現在取り組んでいます。 ただし、新しいZammad(テスト)システムでSSOをテストすることはできます。@MrGenerationは、次の空き時間帯のSSO構成をカバーするようにドキュメントを拡張していただけますか?