A デプロイメント固有ページの作成
Oracle Single Sign-Onでは、デプロイメントに固有のログイン、パスワード変更、およびシングル・サインオン・サーバーによるシングル・サインオフ・ページを統合するためのフレームワークが提供されます。つまり、UIのルック・アンド・フィールおよびグローバリゼーション要件に合せてこれらのページを調整できます。
JavaServer (JSP)ページを使用することをお薦めします。他のWebテクノロジでは、結果に矛盾が生じる可能性があります。PLSQLページはサポートされていません。製品にサンプル・ページが付属しています。Oracle Single Sign-On製品には、Oracle Application Serverでのテスト用のサンプル・ページが付属しています。
この章のトピックは、次のとおりです:
A.1 シングル・サインオン・サーバーでのデプロイメント固有ページの使用方法
シングル・サインオン・ページを使用可能にするプロセスは、次のようにまとめることができます。
-
ユーザーはアプリケーションをリクエストし、シングル・サインオン・サーバーへリダイレクトされます。
-
ユーザーが認証されない場合、シングル・サインオン・サーバーはユーザーをサンプル・ログイン・ページかデプロイメント固有ページへリダイレクトします。このリダイレクトの一環として、表A-2に示すパラメータがサーバーからページに渡されます。
-
ユーザーはログイン・ページを実行します。これにより、表A-3に示すパラメータが次の認証URLに渡されます。
http://sso_host:sso_port/oam/server/auth_cred_submit
または
https://sso_host:sso_ssl_port/oam/server/auth_cred_submit
これらのパラメータのうち少なくとも2つ(
ssousername
、password
)が変更可能なフィールドとしてページに表示されます。 -
認証が失敗すると、サーバーはユーザーを再びログイン・ページへリダイレクトして、エラー・メッセージを表示します。
-
ユーザーがシングル・サインオン・セッションを終了するには、作業中のアプリケーションで「ログアウト」をクリックします。これにより、アプリケーションのログアウトURLが同時にコールされ、ユーザーはアクセスしたすべてのアプリケーションからログアウトされ、シングル・サインオン・セッションが終了します。
-
ユーザーはシングル・サインオン・サーバーへリダイレクトされ、そこでシングル・サインオフ・ページが表示されます。
A.1.1 パスワード変更ページの動作
パスワードの有効期限が切れている場合や期限切れが近いときにユーザーがログインしようとすると、サーバーは次のように動作します。
表A-1 パスワード変更ページのメッセージ
メッセージ | 説明 |
---|---|
パスワードの有効期限が切れています |
パスワードの失効を表すページが表示されます。ユーザーは、古いパスワードと新しいパスワードを入力する必要があります。新しいパスワードは、Access Managerパスワード・ポリシー・ルールに準拠している必要があります。 |
パスワードがもうすぐ期限切れになります |
警告ページが表示され、ユーザーはここで、パスワードを変更したり、変更せずに続行できます。 |
猶予ログインが有効 |
パスワードが間もなく失効する場合と同じになります。 |
パスワードの変更を要求されます |
この機能は、管理者によるパスワードのリセット後にパスワードの変更をユーザーに要求します。このリセットは、属性 |
A.2 デプロイメント固有ページの記述方法
ログイン・ページ、パスワード変更ページおよびシングル・サインオフ・ページのURLでは、これらのページが正常に機能するために、以降の表に示すパラメータを受け入れる必要があります。
この項では、次の項目について説明します。
A.2.1 ログイン・ページのパラメータ
ログイン・ページのURLでは、表A-2に示すパラメータを受け入れる必要があります。
表A-2 シングル・サインオン・サーバーによりログイン・ページに送信されるログイン・ページ・パラメータ
パラメータ | 説明 |
---|---|
p_error_code |
エラー・コードが文字列の形式で含まれています。認証中にエラーが発生したときに渡されます。 |
request_id |
クライアントとサーバー間でルーティングされるリクエストの追跡に使用される一意の識別子。 |
OAM_REQ |
認証プロセスが完了するまでクライアントで追跡されるユーザー・ログイン・リクエスト・コンテキスト。 |
ログイン・ページでは、表A-3に示すパラメータを次の認証URLに渡す必要があります。
http://sso_host:sso_port/sso/auth
表A-3 ページからシングル・サインオン・サーバーに送信されるログイン・ページのパラメータ
パラメータ | 説明 |
---|---|
ssousername |
ユーザー名が含まれています。UTF-8 encodedであることが必要です。 |
password |
ユーザーによって入力されたパスワードが含まれています。UTF-8 encodedであることが必要です。 |
|
認証プロセスが完了するまでクライアントで追跡されるユーザー・ログイン・リクエスト・コンテキスト。 |
|
クライアントとサーバー間でルーティングされるリクエストの追跡に使用される一意の識別子。 |
ログイン・ページには、パラメータ名ssousername
のテキスト・フィールドとパラメータ名password
のパスワード・フィールドの少なくとも2つが必要です。値は、認証URLに渡されます。
これらのパラメータを送信する他に、ログイン・ページはp_error_code
の指定に従って適切なエラー・メッセージを表示し、ユーザーが「取消」
をクリックするとp_cancel_urlへリダイレクトする必要があります。
A.2.2 パスワード変更ページのパラメータ
6月27日: Lakshmiの報告: 「これはカスタムUIページと同じではありませんか。私には意図が同じであるように思えます。」 2012年6月22日: 開発者の報告: この動作はR2で変更されました。項を更新するために、開発者からの詳細を待機しています。
パスワード変更ページのURLでは、表A-4に示すパラメータを受け入れる必要があります。
注意:
GITデプロイメントでは、パートナ・ログアウト・フローがp_done_url
で問合せパラメータを必要とするとき、このパラメータをURLエンコーディングして、Access Managerログアウト・サーブレットがこれらをAccess Managerパラメータであると解釈するのでなく、1つのp_done_url
の要素であると解釈するようにする必要があります。
表A-4 ページに送信されるパスワード変更パラメータ
パラメータ | 説明 |
---|---|
p_username |
ページのどこかに表示されるユーザー名が含まれています。 |
p_subscribername |
ホスティングが有効な場合のサブスクライバ・ニックネームです。 注意: このフィールドは、ログイン・ページで必須です。 |
p_error_code |
前回のパスワード変更時にエラーが発生していた場合、文字列形式のエラー・コードが含まれます。 |
p_done_url |
パスワードが保存された後に戻る適切なページのURLが含まれます。 |
site2pstoretoken |
パスワードの期限が切れたか期限が切れようとしている場合に/sso/authログインURLで必要になる |
p_pwd_is_exp |
パスワードの期限が切れたのか、それとも期限が切れようとしているのかを示すフラグ値が含まれています。値は |
locale |
ユーザーの言語設定です(オプション)。ISO形式にする必要があります。たとえば、フランス語の場合は |
パスワード変更ページは、表A-5に示すパラメータを、パスワード変更URLに渡す必要があります。
http://sso_host:sso_port/sso/ChangePwdServlet
表A-5 ページにより送信されるパスワード変更ページのパラメータ
パラメータ | 説明 |
---|---|
p_username |
ページのどこかに表示されるユーザー名が含まれています。パスワード変更ページから、非表示フィールドとして送信する必要があります。UTF-8 encodedであることが必要です。 |
p_old_password |
ユーザーの古いパスワードが含まれています。UTF-8 encodedであることが必要です。 |
p_new_password |
ユーザーの新しいパスワードが含まれています。UTF-8 encodedであることが必要です。 |
p_new_password_confirm |
ユーザーの新しい確認パスワードが含まれています。UTF-8 encodedであることが必要です。 |
p_done_url |
パスワードが保存された後に戻る適切なページのURLが含まれます。 |
p_pwd_is_exp |
パスワードの期限が切れたのか、それとも期限が切れようとしているのかを示すフラグ値が含まれています。値は |
site2pstoretoken |
ログイン処理用のリダイレクトURL情報が含まれています。 |
p_action |
変更をコミットします。値は |
p_subscribername |
ページのどこかに表示されるユーザー名が含まれています。 |
p_request |
ユーザーによりリクエストされた保護URLです。 |
locale |
ユーザーの言語設定です(オプション)。ISO形式にする必要があります。たとえば、フランス語は 「グローバリゼーション・サポートの追加」を参照してください。 |
パスワード変更ページには、少なくともp_old_password
、p_new_password
およびp_new_password_confirm
の3つのパスワード・フィールドが必要です。パスワード変更ページはこれらのフィールドをパスワード変更URLへ送信します。
パスワード変更ページは、p_done_url
も非表示パラメータとしてパスワード変更URLへ送信します。さらに、p_error_code
の値に応じてエラー・メッセージを表示する必要があります。
A.3 ページのエラー・コード
ログインおよびパスワード変更ページのURLでは、これらのページが正しく機能するために、以降の表に示すプロセス・エラーを受け入れる必要があります。
OAMサーバーが設定されると、ログイン・ページは表A-6に示すエラー・コードを処理する必要があります。
表A-6 ログイン・ページのエラー・コード
p_error_codeの値 | 対応するメッセージと説明 |
---|---|
acct_lock_err |
説明: ユーザーは何度もログインに失敗しました。 メッセージ: 「アカウントがロックされています。システム管理者に通知してください。」 |
pwd_exp_err |
説明: ユーザーのパスワードはすでに期限切れです。 メッセージ: 「パスワードが期限切れです。管理者に連絡して、パスワードをリセットしてください。」 |
null_uname_pwd_err |
説明: ユーザーはユーザー名フィールドを空白のままにしました。 メッセージ: 「有効なユーザー名を入力してください。」 |
auth_fail_exception |
説明: 認証に失敗しました。 メッセージ: 「認証に失敗しました。再試行してください。」 |
null_password_err |
説明: ユーザーはパスワード・フィールドを空白のままにしました。 メッセージ: 「ログイン・パスワードを入力する必要があります。」 |
sso_forced_auth |
説明: アプリケーションは認証を必要としています。 メッセージ: 「アクセスしようとしているアプリケーションに以前サインインしている場合でも、再度サインインする必要があります。」 |
unexpected_exception |
説明: 予期しないエラーが認証中に発生しました。 メッセージ: 「予期しないエラーが発生しました。再試行してください。」 |
unexp_err |
説明: 予期しないエラーです。 「予期しないエラーが発生しました。管理者に通知してください。」 |
internal_server_err |
説明: 内部サーバー・エラーのレポートです。 メッセージ: 「内部サーバー・エラーです。管理者に通知してください。」 |
internal_server_try_again_err |
説明: 再試行のプロンプト付きの内部サーバー・エラーのレポートです。 メッセージ: 「内部サーバー・エラーです。操作を再試行してください。」 |
internal_server_try_later_err |
説明: 後での実行のプロンプト付きの内部サーバー・エラーのレポートです。 メッセージ: 「内部サーバー・エラーです。後で操作を実行してください。」 |
gito_err |
説明: 非アクティブのタイムアウトです。ユーザーは再度ログインする必要があります。 メッセージ: 「シングル・サインオン・セッションが期限切れになっています。セキュリティのため、一定の時間操作がないとセッションは期限切れになります。再度サインインしてください。」 |
cert_auth_err |
説明: 証明書サインオンに失敗しました。ユーザーは証明書が有効であることを確認するか、または管理者に連絡する必要があります。 メッセージ: 「証明書ベースのサインインに失敗しました。証明書が有効であるか確認してください。有効でない場合はシステム管理者に連絡してください。」 |
session_exp_error |
説明: シングル・サインオン・セッションの時間制限に達しました。 メッセージ: 「シングル・サインオン・セッションが期限切れになっています。セキュリティのため、指定された時間が経過するとセッションは期限切れになります。再度サインインしてください。」 |
userid_mismatch |
説明: 強制認証中に提示されたユーザーIDは、現在のシングル・サインオン・セッションのユーザーIDと一致しません。 メッセージ: 「認証用に送信されたユーザー名は、既存のシングル・サインオン・セッションに存在するユーザー名と一致しません。」 |
A.4 グローバリゼーション・サポートの追加
OracleAS Single Sign-Onフレームワークにより、デプロイメント固有ページを各々のデプロイメントのニーズに合せてグローバル化できます。どの言語でページで表示するかを決めるとき、様々な方針を採ることができます。2つの方針を次の項で示します。
A.4.1 ページに表示する言語の決定
この項では、「HTTP Accept-Language」ヘッダーとデプロイメント・ページ・ロジックのいずれかを使用して表示言語を選択する方法を説明します。次の各項では、2つの方針について説明します。
A.4.1.1 Accept-Languageヘッダーを使用したページの決定
ブラウザでエンド・ユーザーは、Webコンテンツを表示する際の言語(ロケール)を決定できます。ブラウザはユーザーが選択した言語をサーバーへ、HTTP Accept-Languageヘッダーの形式で送信します。デプロイメント固有ページのロジックはこのヘッダーを調べ、それに応じてこのページをレンダリングする必要があります。シングル・サインオン・サーバーでは、このページを受け取ると、Accept-Languageヘッダーの値を読み取り、ユーザーのアイデンティティの伝播時にその値をアプリケーションへ送信します。多くのアプリケーションでは、ユーザーがこのヘッダーをオーバーライドできますが、シングル・サインオフ・ページはサインオン時に確立された言語で表示される点に注意してください。このため、すべてのアプリケーションで同じセッション言語が使用されます。
Accept-Languageヘッダーは、言語設定を決定するための推奨メカニズムです。この方法の主な利点は、エンド・ユーザーが他のWebサイトを閲覧している間に、言語をすでに設定している可能性が高いということです。そのため、これらのページとシングル・サインオンのページ間で閲覧の一貫性が保たれます。
A.4.1.2 ページ・ロジックを使用した言語の決定
前の項で説明した方法をお薦めしますが、ブラウザで設定された言語を拡張(またはオーバーライド)するメカニズムに基づいてグローバリゼーションを実装することもできます。たとえば、次のいずれかの方法があります。
-
ログイン・ページに言語一覧を表示し、ユーザーが選択できるようにします。ユーザーの便宜を考慮して、永続Cookieを設定してこの選択を永続的なものにすることもできます。
-
言語を1つ設定して、ページをレンダリングします。この方法は、ユーザーが単一言語で入力することがわかっている場合に適しています。
-
集中管理されたアプリケーション・リポジトリまたはディレクトリから言語設定を取得します。ユーザー設定項目、システム設定項目、構成データの集中管理されたストアは、言語を格納するのに最適です。
ページのロジックを使用して言語を設定する場合、ページではこの情報をシングル・サインオン・サーバーに伝播する必要があります。サーバーは、この情報をアプリケーションに伝播する必要があります。最終的には、一貫性のあるグローバリゼーションが保たれます。ページでは、ログイン・フォームのlocale
パラメータ(表A-3)を使用して、ISO-639形式で言語を渡す必要があります。多くのサイトには、ISO-639の2文字言語コードの全一覧があります。次のサイトには、ISO-3166の2文字国コードの全一覧があります。
http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
A.4.2 ページのレンダリング
エンド・ユーザーのロケールが決定されると、デプロイメント固有ページでは対応する翻訳文字列を使用して、ページをレンダリングする必要があります。これらの文字列の格納方法および取得方法については、『Oracle Application Serverグローバリゼーション・ガイド』のロケール認識に関する章を参照してください。Java開発に関する標準的なドキュメントも参照してください。次に2つのリンクを示します。
-
Javaの国際化ガイド:
http://java.sun.com/j2se/1.4.2/docs/guide/intl/index.html
-
Javaドキュメントの一般的なリンク:
http://java.sun.com/j2se/1.4.2/docs
A.5 デプロイメント固有ページに関するガイドライン
デプロイメント固有ページを実装する場合は、次のガイドラインに従ってください。
-
ログイン・ページとパスワード変更ページは、SSLで保護することをお薦めします。
-
ログイン・ページとパスワード変更ページでは、クロスサイト・スクリプティング攻撃に備えてコーディングする必要があります。
-
ログイン・ページとパスワード変更ページでは、自動埋込みとキャッシュを
off
に設定する必要があります。これにより、ユーザーの資格証明がブラウザに保存されたり、キャッシュされる恐れはなくなります。AutoComplete
タグの例を次に示します。<FORM NAME="foo" AutoComplete="off" METHOD="POST" ACTION="bar">
-
オラクル社では、無認可のアクセスに対して警告するバナーを表示するように、ログイン・ページを構成することをお薦めします。たとえば、次のような文章を使用できます。
Unauthorized use of this site is prohibited and may subject you to civil and criminal prosecution.
-
シングル・サインオン・サーバーをホスティングするコンピュータに、ログイン・ページおよびパスワード変更ページをデプロイします。これにより、これらのページの不正なバージョンを簡単に検出できます。
A.6 カスタマイズしたデプロイメント固有ページ
次の各項では、デプロイメント固有ページのカスタマイズについて説明します。
A.6.1 デプロイメント固有ページのカスタマイズ
ipassample.jar
ファイルには、login-ex.jsp
、password-ex.jsp
、signoff-ex.jsp
の各ファイルが含まれています。これらのファイルを、デプロイメントに合せてカスタマイズできます。これらのファイルを使用する場合は、次のようにします。次に示すコマンドを使用してファイルを取り出します。
ORACLE_HOME/jdk/bin/jar -xvf ORACLE_HOME/sso/lib/ipassample.jar
A.6.2 カスタム・クラスの使用方法
一般に、カスタマイズしたデプロイメント固有ページは、OC4J_SECURITYによって使用されている現在のバージョンのコンポーネント・クラスで動作する必要があります。カスタム・アプリケーションで、特定のクラスの別のバージョンを使用する必要がある場合は、そのクラスをOC4J_SECURITYインスタンスではなく、別のOC4Jインスタンスにデプロイすることが必要です。
たとえば、OC4J_SECURITYで使用されるバージョンと競合するカスタムlog4jクラスを使用する必要のあるデプロイメントでは、そのカスタム・クラスを含むローカルのlog4j jar
ファイルを使用する別のOC4J_SECURITYインスタンスを起動します。
警告:
OC4J_SECURITYで使用されるクラスをカスタム・バージョンに置き換えると、Oracle Single Sign-Onや他のOracle Application Serverコンポーネントが使用できなくなる場合があります。
A.7 「外部アプリケーションの追加」ページ
「シングル・サインオン・サーバー管理」ページで「外部アプリケーション管理」リンクをクリックし、「外部アプリケーションの追加」リンクをクリックすると、「外部アプリケーションの追加」ページが表示されます。次の各項では、「外部アプリケーションの追加」ページについて説明します。
A.7.1 「外部アプリケーションの追加」ページの見出しとフィールド
このページには、次の見出しとフィールドが含まれています。
表A-7 外部アプリケーション・ログイン
フィールド | 説明 |
---|---|
アプリケーション名 |
外部アプリケーションを識別する名前を入力します。これは、外部アプリケーションのデフォルト名です。 |
ログインURL |
外部アプリケーションのHTMLログイン・ページを認証するための送信先URLを入力します。例として次にYahoo! MailのログインURLを示します。 http://login.yahoo.com/config/login?6p4f5s403j3h0 |
ユーザー名/IDフィールド名 |
外部アプリケーションのHTMLログイン・フォームのユーザー名またはユーザーIDフィールドを識別する用語を入力します。この用語は、ログイン・フォームのHTMLソースで確認できます。(この後の手順の例を参照してください)。このフィールドは、Basic認証を使用している場合は適用されません。 |
パスワード・フィールド名 |
外部アプリケーションのHTMLログイン・フォームのパスワード・フィールドを識別する用語を入力します。この用語は、ログイン・フォームのHTMLソースで確認できます。(この後の手順の例を参照してください)。このフィールドは、Basic認証を使用している場合は適用されません。 |
表A-8 認証方式
フィールド | 説明 |
---|---|
使用する認証タイプ |
プルダウン・メニューから、アプリケーションで使用するフォーム送信方法を選択します。これは、ブラウザがメッセージ・データを送信する方法を示します。この文字列は、ログイン・フォームのHTMLソースで確認できます。次の3つの方法のいずれかを選択します。 POST:シングル・サインオン・サーバーにデータを転送し、ログイン資格証明をフォームの本文内で送信します。 GET: ページ・リクエストをサーバーに送信し、ログイン資格証明をログインURLの一部として発行します。 Basic認証:アプリケーションURL内のログイン資格証明を送信します。この送信は、HTTP Basic認証で保護されます。 注意:
|
表A-9 追加フィールド
フィールド | 説明 |
---|---|
フィールド名 |
ログイン時にユーザー入力を要求するフィールドをHTMLログイン・フォームに追加した場合は、そのフィールドの名前を入力します。このフィールドは、Basic認証を使用している場合は適用されません。 |
フィールド値 |
対応するフィールド名のデフォルト値を入力します(該当する場合)。このフィールドは、Basic認証を使用している場合は適用されません。 |
A.7.2 外部アプリケーションの追加
外部アプリケーションを追加するには、次のタスクを実行します。
次の例は、Yahoo! Mailで使用する値のソースを示しています。
<form method=post action="http://login.yahoo.com/config/login?6p4f5s403j3h0" autocomplete=off name=a> ... <td><input name=login size=20 maxlength=32></td> .... <td><input name=passwd type=password size=20 maxlength=32></td> ... <input type=checkbox name=".persistent" value="Y" >Remember my ID & password ... </form>
ソースには次の値が示されています。
-
ログインURL
:
http://login.yahoo.com/config/login?6p4f5s403j3h0
-
ユーザー名/IDフィールド名:
login
-
パスワード・フィールド名:
passwd
-
使用する認証タイプ:
POST
-
フィールド名:
.persistent Y
-
フィールド値:
[off]
注意:
AS中間層のホスト名を変更する場合は、この中間層で外部アプリケーションの「ログインURL」フィールドを手動で更新する必要があります。この変更は、次の項で説明する「外部アプリケーションの編集」ページで行います。