Show Table of Contents
23.7. Web アプリケーションと Identity Management のスマートカード認証の統合
開発者は、Identity Management Web インフラストラクチャーの Apache モジュール経由で、認証バックエンドとして Identity Management サーバーを使用するアプリケーションでは、スマートカードに複数のロールアカウントがリンクされているユーザーを認証できるようにアプリケーションを設定することができます。
23.7.1. スマートカードでの Web アプリケーション認証における前提条件
Apache Web アプリケーションが実行中のサーバー:
- Identity Management ドメインのクライアントとしてサーバーを登録します。
- sssd-dbus および mod_lookup_identity パッケージをインストールします。
- Apache に、
mod_nssモジュールを使用して、機能する HTTPS 接続が設定されていることを確認します。
23.7.2. Web アプリケーション向けの Identity Management スマートカード認証の設定
/etc/httpd/conf.d/nss.confファイルのmod_nss設定で TLS ネゴシエーションを有効化します。NSSRenegotiation NSSRequireSafeNegotiation on
- ユーザー証明書を発行する CA が
mod_nss証明書データベースのクライアント証明書向けに信頼されていることを確認します。データベースのデフォルトの場所は/etc/httpd/aliasです。 - Web アプリケーションを追加します。この手順では、ログインページおよび保護エリアだけが含まれる最小限のアプリケーションを例として使用します。
/loginエンドポイントでは、ユーザーはユーザー名のみが指定でき、アプリケーションの保護エリアに送信されます。/appエンドポイントはREMOTE_USER環境変数をチェックします。ログインが成功すると、変数にはログインユーザーの ID が含まれます。ログインに成功しなかった場合には、変数は設定されません。
- ディレクトリーを作成して、グループを
apacheに、モードを最低でも750に設定します。この手順では、/var/www/app/という名前のディレクトリーを使用します。 - ファイルを作成して、グループを
apacheに、モードを最低でも750に設定します。この手順では、/var/www/app/login.pyという名前のファイルを使用します。以下の内容をファイルに保存します。#! /usr/bin/env python def application(environ, start_response): status = '200 OK' response_body = """ <!DOCTYPE html> <html> <head> <title>Login</title> </head> <body> <form action='/app' method='get'> Username: <input type='text' name='username'> <input type='submit' value='Login with certificate'> </form> </body> </html> """ response_headers = [ ('Content-Type', 'text/html'), ('Content-Length', str(len(response_body))) ] start_response(status, response_headers) return [response_body] - ファイルを作成して、グループを
apacheに、モードを最低でも750に設定します。この手順では、/var/www/app/protected.pyという名前のファイルを使用します。以下の内容をファイルに保存します。#! /usr/bin/env python def application(environ, start_response): try: user = environ['REMOTE_USER'] except KeyError: status = '400 Bad Request' response_body = 'Login failed.\n' else: status = '200 OK' response_body = 'Login succeeded. Username: {}\n'.format(user) response_headers = [ ('Content-Type', 'text/plain'), ('Content-Length', str(len(response_body))) ] start_response(status, response_headers) return [response_body] - アプリケーション用の設定ファイルを作成します。この手順では、
/etc/httpd/conf.d/app.confという名前のファイルを使用し、以下のコンテンツを追加します。<IfModule !lookup_identity_module> LoadModule lookup_identity_module modules/mod_lookup_identity.so </IfModule> WSGIScriptAlias /login /var/www/app/login.py WSGIScriptAlias /app /var/www/app/protected.py <Location "/app"> NSSVerifyClient require NSSUserName SSL_CLIENT_CERT LookupUserByCertificate On LookupUserByCertificateParamName "username" </Location>このファイルでは、以下が設定されます。- 最初の部分では、すでに読み込まれていない場合には
mod_lookup_identityを読み込みます。 - 次の部分では
/loginおよび/appエンドポイントを適切な Web Server Gateway Interface (WSGI) スクリプトにマッピングします。 - 最後の部分では、TLS ハンドシェーク時にクライアントの証明書が必要でそれを使用できるように
/appエンドポイントのmod_nssを設定します。さらに、オプションの要求パラメーターusernameがユーザーの ID を検索するように設定します。

Where did the comment section go?
Red Hat's documentation publication system recently went through an upgrade to enable speedier, more mobile-friendly content. We decided to re-evaluate our commenting platform to ensure that it meets your expectations and serves as an optimal feedback mechanism. During this redesign, we invite your input on providing feedback on Red Hat documentation via the discussion platform.