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 を検索するように設定します。
このページには機械翻訳が使用されている場合があります (詳細はこちら)。