フロントエンド認証方式の確立
フロントエンド認証方式では、FCC (フォーム認証情報コレクタ)、つまり selectlogin.fcc を使用して、保護されたリソースへのアクセスをリクエストする際に使用するログイン選択画面を生成します。FCC はエージェント用に FCC 命令文を動的に構築するため、エージェントは認証方式の選択に合わせてユーザをリダイレクトできます。
sm1252sp1jjp
フロントエンド認証方式では、FCC (フォーム認証情報コレクタ)、つまり selectlogin.fcc を使用して、保護されたリソースへのアクセスをリクエストする際に使用するログイン選択画面を生成します。FCC はエージェント用に FCC 命令文を動的に構築するため、エージェントは認証方式の選択に合わせてユーザをリダイレクトできます。
注:
この selectlogin.fcc は認証情報セレクタ用のサンプルです。認証の選択肢と HTML 形式の組み合せは状況によって異なります。2
フォーム認証情報コレクタ(FCC)の使用
FCC 形式は、Web エージェントが使用する独自の形式であり、認証情報を収集してポリシー サーバに渡します。FCC は、ヘッダと本文で構成されます。
FCC ヘッダの説明
FCC のヘッダは FCC ディレクティブのリストであり、1 行当たりディレクティブを 1 つ含みます。FCC ディレクティブの構文は以下のとおりです。
@<directive>[=<value>]
値には置換文字 % を含めることができ、この場合、%
parameter
% といった形式となります。このパラメータはクレデンシャルが送信される場合に、FCC のファイルと共に POST アクションで渡されます。FCC ディレクティブのセット数は限られています。この例の場合、最も重要なディレクティブは以下のとおりです。
- @targetWeb エージェントがポリシー サーバに渡す必要のあるリソース URL。
- @usernameWeb エージェントがポリシー サーバに渡す必要のあるユーザ名。
- @passwordWeb エージェントがポリシー サーバに渡す必要のあるパスワード。
- @smagentnameWeb エージェントがポリシー サーバに渡す必要のあるエージェント名。エージェントの設定の EncryptAgentName パラメータが「はい」に設定されている場合、名前は暗号化されます。
ヘッダには FCC ディレクティブをすべて表示する必要はありません。以下のとおり、多くのディレクティブには暗黙のデフォルトがあります。
- @target=%target%
- @username=%user%
- @password=%password%
- @smagentname=%smagentname%
FCC 本文の説明
FCC の本文には、HTML または他の Web ブラウザが判読可能な形式が含まれます。FCC 本文は、ユーザが認証情報を要求される場合に Web ブラウザでレンダリングされます。
本文には置換文字を含めることができ、この場合、$$parameter$$ といった形式となります。パラメータ名は、GET アクションで FCC のファイルと共に渡される既知のパラメータの特定のセットに属する必要があります。
この例の場合、重要なディレクティブは以下のとおりです。
- $$target$$ユーザが要求したリソース URL。
- $$smagentname$$エージェント名。エージェントの設定の EncryptAgentName パラメータが「はい」に設定されている場合、名前は暗号化されます。
フロント エンド認証のための selectlogin.fcc ファイルの設定
selectlogin.fcc ファイルは、サンプル FCC として Web エージェントのインストールに含まれています。フロントエンド認証方式では selectlogin.fcc ファイルを使用して、保護されているリソースをユーザが要求する場合に表示されるログイン ダイアログ ボックスをレンダリングします。
ユーザがリソースを要求すると、Web エージェントは要求された URL をポリシー サーバに渡します。ほとんどの場合、Web エージェントが渡すリソース URL はユーザが要求するものと同じです。認証方式のために定義された FCC ファイルは、%target%(POST パラメータ)として $$target$$(GET パラメータ)を渡し、@target=%target% の命令を使用することにより、要求された URL が送信されるようにします。例:
<!-- some HTML code --> <formname="Login" method="POST"> <!-- some HTML code --> <inputtype="hidden" name="target" value="$$target$$"> <!-- more HTML code --> </form> <!-- more HTML code -->
注:
@target=%target% 命令がデフォルトで使用されます。この場合、selectlogin.fcc ファイルは %target% パラメータの値を以下の値に置き換えることによって動作します。
/path/redirect.ext?authtype=type&target=$$target$$
- redirect.extターゲット パラメータで提供される URL にリダイレクトする単純なスクリプト。例の値は、redirect.asp または redirect.jsp です。また、リダイレクト スクリプトの URL が提供される認証情報に依存する限り同じ物理ファイルを公開する異なるリダイレクト スクリプト ファイルまたは仮想ディレクトリを使用することもできます。
- typeユーザが選択する認証情報によって決定される文字列。異なるリダイレクト URL が異なる認証方式によって保護される場合は、選択された認証方式によって FCC が収集する認証情報が処理されます。選択された認証方式により、ユーザの認証レベルを含むユーザ セッションが確立されます。ユーザがリダイレクト スクリプト リソースを認証および許可されると、最初に要求したリソースにリダイレクトされます。
注:
シングル サインオンが有効であり、ユーザの保護レベルがフロントエンド認証方式の保護レベルと同等か、またはこれより高い場合、元のリソースに対してユーザのセッションが認証されます。ユーザが許可されるかどうかは、ユーザ認証コンテキストを確認できるポリシーの設定に依存します。たとえば、特定のリソースにアクセスするには、最小限の保護レベルまたは特定の条件が必要な場合があります。Selectlogin.fcc の設定の詳細
selectlogin.fcc ファイルでは、さまざまな認証方式を設定できます。以下のリストに、一部の方式のための設定の詳細を示します。
- 証明書とフォーム方式は、SSL 接続によるポスティングを必要とします。フロントエンド認証方式が SSL 接続を使用しない場合は、エージェントは GET リクエストが取得するものと同じ selectlogin.fcc URL を POST できません。以下の JavaScript コードを使用して、URL を SSL URL に変換できます。arr = document.URL.split("://"); document.Login.action = "https://" + arr[1];
- SafeWord の 2 段階の認証に対応するには、最初のフォームの認証要求で取得したユーザ名を、2 回目の認証要求までクライアント側で記憶しておく必要があります。エージェントのインストールにも含まれる safeword.fcc ファイルは、@smtransient FCC の命令を使用してユーザ名を一時的 Cookie に保持します。selectlogin.fcc ファイルでも同じ命令を使用できますが、ユーザが異なる認証情報を選択した場合でも Cookie が作成されます。以下のとおり、safeword.fcc ファイルへの POST の action 引数を変更することをお勧めします。document.Login.action = "safeword.fcc";
- Windows 認証方式は FCC ファイルを使用しません。特定の擬似リソース URL を使用します。この URL は Web サーバには存在しませんが、エージェントによって認識されます。Windows 認証を動作させるには、以下のとおり、この同じ擬似リソース URL にaction引数を設定します。document.Login.action = "/siteminderagent/ntlm/creds.ntc";
- SecurID 認証方式は FCC を使用しませんが、エージェントは selectlogin.fcc ファイルに SecurID 認証情報を直接 POST できます。action 引数の変更は必要ありません。
- アクション URL は別の Web サーバによってホストできます。ただし、この Web サーバも、固有のリソース URL(FCC、SCC、および NTC)が認識されて正常に処理されるよう、エージェントにより保護される必要があります。注:SCC の擬似リソース URL は証明書のみの認証に使用されます。
サンプル selectlogin.fcc ファイル
簡略化された selectlogin.fcc ファイル(HTML のフォーマットなし)を次に示します。smquerydata および postpreservationdata の非表示の入力フィールドは、それぞれ GET および POST のパラメータを渡すのに必要です。
smauthreason パラメータは、ポリシー サーバが提供する理由コードおよび認証要求を保持します。
サンプル selectlogin.fcc ファイルは以下のとおりです。
@username=%USER% @smretries=0 <html> <head> <script language="JavaScript"> function submitForm(form) { authtype = "none"; if (form == 1) { document.Login.USER.value = document.Login.USER1.value; document.Login.PASSWORD.value = document.Login.PASSWORD1.value; if (!document.Login.UseCert.checked) { // username/password only authtype = "form"; } else if (document.Login.USER.value == "" && document.Login.PASSWORD.value == "") { // certificate only authtype = "cert"; } else { // username/password and certificate authtype = "certform"; // This option requires posting over SSL. arr = document.URL.split("://"); document.Login.action = "https://" + arr[1]; } } else if (form == 2) { // SecurID authentication authtype = "securid"; document.Login.USER.value = document.Login.USER2.value; document.Login.PASSWORD.value = document.Login.PASSWORD2.value; } else if (form == 3) { // SafeWord authentication authtype = "safeword"; document.Login.USER.value = document.Login.USER3.value; document.Login.PASSWORD.value = ""; // POST to safeword.fcc, for additional processing. // NOTE: This forces the web agent to POST to safeword.fcc // even if the authentication scheme's URL parameter // is set to selectlogin.fcc for redirection purposes. document.Login.action = "safeword.fcc"; } else if (form == 4) { // Authenticate with the current Windows login credentials authtype = "windows"; document.Login.USER.value = ""; document.Login.PASSWORD.value = ""; // POST to creds.ntc (required by the Windows authentication scheme). document.Login.action = "/siteminderagent/ntlm/creds.ntc"; } // Generate the target, depending on the user's choice of credentials. // This sample uses redirect.asp, but it could also be redirect.jsp, redirect.pl, etc. // This sample uses the following format: /auth/redirect.asp?authtype=<choice>&target=<original target> // Other formats are also possible, e.g.: /auth-<choice>/redirect.asp?target=<original target> // The helper realms' resource filters must be defined accordingly (see the tech note). // Check if the target is not already in the same format. The user may // have been redirected back to selectlogin.fcc upon authentication failure, // if the authentication scheme's URL parameter is set to selectlogin.fcc. if ("$$target$$".indexOf("/auth/redirect.asp?authtype=") == 0 && "$$target$$".indexOf("&target=") > 0) { // This must be a redirect. Extract the original target, but not // the authtype parameter, because the user may have made a different // choice of credentials this time. trgarr = "$$target$$".split("&target="); document.Login.target.value = "/auth/redirect.asp?authtype=" + authtype + "&target=" + trgarr[1]; } else { // This is not a redirect. Pass $$target$$ as a URL query parameter. document.Login.target.value = "/auth/redirect.asp?authtype=" + authtype + "&target=$$target$$"; } document.Login.submit(); } function resetCredFields() { document.Login.PASSWORD.value = ""; document.Login.PASSWORD1.value = ""; document.Login.PASSWORD2.value = ""; } </script> </head> <body onLoad="resetCredFields();"> <center> <form name="Login" method="POST"> <input type="hidden" name="USER"> <input type="hidden" name="PASSWORD"> <input type="hidden" name="smagentname" value="$$smagentname$$"> <input type="hidden" name="smauthreason" value="$$smauthreason$$"> <input type="hidden" name="smquerydata" value="$$smquerydata$$"> <input type="hidden" name="postpreservationdata" value="$$postpreservationdata$$"> <input type="hidden" name="target"> <!-- Some table formatting throughout --> <!-- Authentication Choice: Password And/Or Certificate --> <input type="text" name="USER1"> <input type="password" name="PASSWORD1"> <input type="button" value="Login" onClick="submitForm(1);"> <!-- Authentication Choice: Windows Authentication --> <input type="button" value="Login" onClick="submitForm(4);"> <!-- Authentication Choice: SecurID Authentication --> <input type="text" name="USER2"> <input type="password" name="PASSWORD2"> <input type="button" value="Login" onClick="submitForm(2);"> <!-- Authentication Choice: SafeWord Authentication --> <input type="text" name="USER3"> <input type="button" value="Login" onClick="submitForm(3);"> <!-- More table formatting --> </form> </center> </body> </html>
フロントエンド認証方式の設定
グリーティングを生成するサンプル アプリケーションを保護するフロントエンド認証方式を設定します。これは、以下の設定を使用して AuthChannel 認証方式を設定することで解決できます。
- 認証タイプのスタイルHTML フォーム テンプレート
- 保護レベル1フロントエンド認証方式は、構成内の他の方式よりも保護レベルを低くする必要があるため、AuthChannel 認証方式の保護レベルは 1 に設定します。保護されたリソースにアクセスしようとログインする際にユーザが選択する認証方式によって、そのユーザの実際の保護レベルが決まります。フロントエンド認証方式の保護レベルは低いため、最初にリクエストしたリソースにリダイレクトされるときにユーザが再度確認されることはありません。
- Web サーバ名auth.sample.comサンプル アプリケーションが置かれている Web サーバを指定します。
- ターゲット/siteminderagent/forms/selectlogin.fccこのターゲットは selectlogin.fcc ファイルを指しています。selectlogin.fcc ファイルは Web エージェントのインストールに付属しているサンプル ファイルです。