Oracle® Fusion Middleware Oracle Access Management開発者ガイド 11g リリース2 (11.1.2.1) B69537-05 |
|
前 |
Oracle Single Sign-Onでは、デプロイメントに固有のログイン、パスワード変更、およびシングル・サインオン・サーバーによるシングル・サインオフ・ページを統合するためのフレームワークが提供されます。つまり、UIのルック・アンド・フィールおよびグローバリゼーション要件に合せてこれらのページを調整できます。
JavaServer (JSP)ページを使用することをお薦めします。他のWebテクノロジでは、結果に矛盾が生じる可能性があります。PLSQLページはサポートされていません。製品にサンプル・ページが付属しています。Oracle Single Sign-On製品には、Oracle Application Serverでのテスト用のサンプル・ページが付属しています。
この章には次のトピックが含まれます。
シングル・サインオン・ページを使用可能にするプロセスは、次のようにまとめることができます。
ユーザーはアプリケーションをリクエストし、シングル・サインオン・サーバーへリダイレクトされます。
ユーザーが認証されない場合、シングル・サインオン・サーバーはユーザーをサンプル・ログイン・ページかデプロイメント固有ページへリダイレクトします。このリダイレクトの一環として、表A-1に示すパラメータがサーバーからページに渡されます。
ユーザーはログイン・ページを実行します。これにより、表A-2に示すパラメータが次の認証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が同時にコールされ、ユーザーはアクセスしたすべてのアプリケーションからログアウトされ、シングル・サインオン・セッションが終了します。
ユーザーはシングル・サインオン・サーバーへリダイレクトされ、そこでシングル・サインオフ・ページが表示されます。
ログイン・ページ、パスワード変更ページおよびシングル・サインオフ・ページのURLでは、これらのページが正常に機能するために、以降の表に示すパラメータを受け入れる必要があります。
この項には次のトピックが含まれます。
ログイン・ページのURLでは、表A-1に示すパラメータを受け入れる必要があります。
表A-1 シングル・サインオン・サーバーによりログイン・ページに送信されるログイン・ページ・パラメータ
パラメータ | 説明 |
---|---|
p_error_code |
エラー・コードが文字列の形式で含まれています。認証中にエラーが発生したときに渡されます。 |
request_id |
クライアントとサーバー間でルーティングされるリクエストの追跡に使用される一意の識別子。 |
OAM_REQ |
認証プロセスが完了するまでクライアントで追跡されるユーザー・ログイン・リクエスト・コンテキスト。 |
ログイン・ページでは、表A-2に示すパラメータを次の認証URLに渡す必要があります。
http://sso_host:sso_port/sso/auth
表A-2 ページからシングル・サインオン・サーバーに送信されるログイン・ページのパラメータ
パラメータ | 説明 |
---|---|
ssousername |
ユーザー名が含まれています。UTF-8 encodedであることが必要です。 |
password |
ユーザーによって入力されたパスワードが含まれています。UTF-8 encodedであることが必要です。 |
|
認証プロセスが完了するまでクライアントで追跡されるユーザー・ログイン・リクエスト・コンテキスト。 |
|
クライアントとサーバー間でルーティングされるリクエストの追跡に使用される一意の識別子。 |
ログイン・ページには、パラメータ名ssousername
のテキスト・フィールドとパラメータ名password
のパスワード・フィールドの少なくとも2つが必要です。値は、認証URLに渡されます。
これらのパラメータを送信する他に、ログイン・ページはp_error_code
の指定に従って適切なエラー・メッセージを表示し、ユーザーが「取消」をクリックするとp_cancel_url
へリダイレクトする必要があります。
パスワード変更ページのURLでは、表A-3に示すパラメータを受け入れる必要があります。
注意: GITデプロイメントでは、パートナ・ログアウト・フローが |
表A-3 ページに送信されるパスワード変更パラメータ
パラメータ | 説明 |
---|---|
p_username |
ページのどこかに表示されるユーザー名が含まれています。 |
p_subscribername |
ホスティングが有効な場合のサブスクライバ・ニックネームです。 注意: このフィールドは、ログイン・ページで必須です。 |
p_error_code |
前回のパスワード変更時にエラーが発生していた場合、文字列形式のエラー・コードが含まれます。 |
p_done_url |
パスワードが保存された後に戻る適切なページのURLが含まれます。 |
site2pstoretoken |
パスワードの期限が切れたか期限が切れようとしている場合に/sso/authログインURLで必要になる |
p_pwd_is_exp |
パスワードの期限が切れたのか、それとも期限が切れようとしているのかを示すフラグ値が含まれています。値は |
locale |
ユーザーの言語設定です(オプション)。ISO形式にする必要があります。たとえば、フランス語の場合は |
パスワード変更ページは、表A-4に示すパラメータを、パスワード変更URLに渡す必要があります。
http://sso_host:sso_port/sso/ChangePwdServlet
表A-4 ページにより送信されるパスワード変更ページのパラメータ
パラメータ | 説明 |
---|---|
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
の値に応じてエラー・メッセージを表示する必要があります。
ログインおよびパスワード変更ページのURLでは、これらのページが正しく機能するために、以降の表に示すプロセス・エラーを受け入れる必要があります。
OAMサーバーがOSSO10gに設定されると、ログイン・ページは表A-5に示すエラー・コードを処理する必要があります。
表A-5 ログイン・ページのエラー・コード
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と一致しません。 メッセージ: 「認証用に送信されたユーザー名は、既存のシングル・サインオン・セッションに存在するユーザー名と一致しません。」 |
OracleAS Single Sign-Onフレームワークにより、デプロイメント固有ページを各々のデプロイメントのニーズに合せてグローバル化できます。どの言語でページで表示するかを決めるとき、様々な方針を採ることができます。2つの方針を次の項で示します。
この項では、「HTTP Accept-Language」ヘッダーとデプロイメント・ページ・ロジックのいずれかを使用して表示言語を選択する方法を説明します。
ブラウザでエンド・ユーザーは、Webコンテンツを表示する際の言語(ロケール)を決定できます。ブラウザはユーザーが選択した言語をサーバーへ、HTTP Accept-Languageヘッダーの形式で送信します。デプロイメント固有ページのロジックはこのヘッダーを調べ、それに応じてこのページをレンダリングする必要があります。シングル・サインオン・サーバーでは、このページを受け取ると、Accept-Languageヘッダーの値を読み取り、ユーザーのアイデンティティの伝播時にその値をアプリケーションへ送信します。多くのアプリケーションでは、ユーザーがこのヘッダーをオーバーライドできますが、シングル・サインオフ・ページはサインオン時に確立された言語で表示される点に注意してください。このため、すべてのアプリケーションで同じセッション言語が使用されます。
Accept-Languageヘッダーは、言語設定を決定するための推奨メカニズムです。この方法の主な利点は、エンド・ユーザーが他のWebサイトを閲覧している間に、言語をすでに設定している可能性が高いということです。そのため、これらのページとシングル・サインオンのページ間で閲覧の一貫性が保たれます。
前の項で説明した方法をお薦めしますが、ブラウザで設定された言語を拡張(またはオーバーライド)するメカニズムに基づいてグローバリゼーションを実装することもできます。たとえば、次のいずれかの方法があります。
ログイン・ページに言語一覧を表示し、ユーザーが選択できるようにします。ユーザーの便宜を考慮して、永続Cookieを設定してこの選択を永続的なものにすることもできます。
言語を1つ設定して、ページをレンダリングします。この方法は、ユーザーが単一言語で入力することがわかっている場合に適しています。
集中管理されたアプリケーション・リポジトリまたはディレクトリから言語設定を取得します。ユーザー設定項目、システム設定項目、構成データの集中管理されたストアは、言語を格納するのに最適です。
ページのロジックを使用して言語を設定する場合、ページではこの情報をシングル・サインオン・サーバーに伝播する必要があります。サーバーは、この情報をアプリケーションに伝播する必要があります。最終的には、一貫性のあるグローバリゼーションが保たれます。ページでは、ログイン・フォームのlocale
パラメータ(表A-2)を使用して、ISO-639形式で言語を渡す必要があります。多くのサイトには、ISO-639の2文字言語コードの全一覧があります。次のサイトには、ISO-3166の2文字国コードの全一覧があります。
http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html
注意:
|
エンド・ユーザーのロケールが決定されると、デプロイメント固有ページでは対応する翻訳文字列を使用して、ページをレンダリングする必要があります。これらの文字列の格納方法および取得方法については、『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
デプロイメント固有ページを実装する場合は、次のガイドラインに従ってください。
ログイン・ページとパスワード変更ページは、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.
シングル・サインオン・サーバーをホスティングするコンピュータに、ログイン・ページおよびパスワード変更ページをデプロイします。これにより、これらのページの不正なバージョンを簡単に検出できます。
ipassample.jar
ファイルには、login-ex.jsp
、password-ex.jsp
、signoff-ex.jsp
の各ファイルが含まれています。これらのファイルを、デプロイメントに合せてカスタマイズできます。これらのファイルを使用する場合は、次のようにします。次に示すコマンドを使用してファイルを取り出します。
ORACLE_HOME/jdk/bin/jar -xvf ORACLE_HOME/sso/lib/ipassample.jar
一般に、カスタマイズしたデプロイメント固有ページは、OC4J_SECURITYによって使用されている現在のバージョンのコンポーネント・クラスで動作する必要があります。カスタム・アプリケーションで、特定のクラスの別のバージョンを使用する必要がある場合は、そのクラスをOC4J_SECURITYインスタンスではなく、別のOC4Jインスタンスにデプロイすることが必要です。
たとえば、OC4J_SECURITYで使用されるバージョンと競合するカスタムlog4jクラスを使用する必要のあるデプロイメントでは、そのカスタム・クラスを含むローカルのlog4j jar
ファイルを使用する別のOC4J_SECURITYインスタンスを起動します。
警告: OC4J_SECURITYで使用されるクラスをカスタム・バージョンに置き換えると、Oracle Single Sign-Onや他のOracle Application Serverコンポーネントが使用できなくなる場合があります。 |
「シングル・サインオン・サーバー管理」ページで「外部アプリケーション管理」リンクをクリックし、「外部アプリケーションの追加」リンクをクリックすると、「外部アプリケーションの追加」ページが表示されます。このページには、次の見出しとフィールドが含まれています。
表A-6 外部アプリケーション・ログイン
フィールド | 説明 |
---|---|
アプリケーション名 |
外部アプリケーションを識別する名前を入力します。これは、外部アプリケーションのデフォルト名です。 |
ログインURL |
外部アプリケーションのHTMLログイン・ページを認証するための送信先URLを入力します。例として次にYahoo! MailのログインURLを示します。 http://login.yahoo.com/config/login?6p4f5s403j3h0 |
ユーザー名/IDフィールド名 |
外部アプリケーションのHTMLログイン・フォームのユーザー名またはユーザーIDフィールドを識別する用語を入力します。この用語は、ログイン・フォームのHTMLソースで確認できます。(この後の手順の例を参照してください)。このフィールドは、Basic認証を使用している場合は適用されません。 |
パスワード・フィールド名 |
外部アプリケーションのHTMLログイン・フォームのパスワード・フィールドを識別する用語を入力します。この用語は、ログイン・フォームのHTMLソースで確認できます。(この後の手順の例を参照してください)。このフィールドは、Basic認証を使用している場合は適用されません。 |
表A-7 認証方式
フィールド | 説明 |
---|---|
使用する認証タイプ |
プルダウン・メニューから、アプリケーションで使用するフォーム送信方法を選択します。これは、ブラウザがメッセージ・データを送信する方法を示します。この文字列は、ログイン・フォームのHTMLソースで確認できます。次の3つの方法のいずれかを選択します。 POST:シングル・サインオン・サーバーにデータを転送し、ログイン資格証明をフォームの本文内で送信します。 GET: ページ・リクエストをサーバーに送信し、ログイン資格証明をログインURLの一部として発行します。 Basic認証:アプリケーションURL内のログイン資格証明を送信します。この送信は、HTTP Basic認証で保護されます。 注意:
|
表A-8 追加フィールド
フィールド | 説明 |
---|---|
フィールド名 |
ログイン時にユーザー入力を要求するフィールドをHTMLログイン・フォームに追加した場合は、そのフィールドの名前を入力します。このフィールドは、Basic認証を使用している場合は適用されません。 |
フィールド値 |
対応するフィールド名のデフォルト値を入力します(該当する場合)。このフィールドは、Basic認証を使用している場合は適用されません。 |
外部アプリケーションを追加する手順
「外部アプリケーション管理」ページから、「外部アプリケーションの追加」を選択します。
「外部アプリケーションの追加」ページが表示されます。
「外部アプリケーション・ログイン」フィールドに、外部アプリケーション名とHTMLログイン・フォームの送信先URLを入力します。Basic認証を使用する場合は、保護されたURLを入力します。
アプリケーションでHTTP POST認証またはHTTP GET認証が使用されている場合は、「ユーザー名/IDフィールド名」フィールドに、HTMLログイン・フォームのユーザー名またはユーザーIDフィールドを識別する用語を入力します。
この名前は、ログイン・フォームのHTMLソースで確認できます。
アプリケーションでBasic認証方式が使用されている場合は、「ユーザー名/IDフィールド名」フィールドを空にします。
アプリケーションでHTTP POST認証またはHTTP GET認証が使用されている場合は、「パスワード・フィールド名」フィールドに、アプリケーションのパスワード・フィールドを識別する用語を入力します。
ログイン・フォームのHTMLソースを参照してください。
アプリケーションでBasic認証方式が使用されている場合は、「パスワード・フィールド名」フィールドを空にします。
ログイン時にユーザー入力を要求するフィールドをHTMLログイン・フォームに追加した場合は、「追加フィールド」フィールドに、そのフィールドの名前とデフォルト値を入力します。
アプリケーションでBasic認証方式が使用されている場合は、これらのフィールドを空にします。
HTMLログイン・フォームでユーザーが追加フィールドのデフォルト値を変更できるようにする場合は、「ユーザーに表示」チェック・ボックスを選択します。
「OK」をクリックします。新しい外部アプリケーションが、「外部アプリケーション管理」ページの「外部アプリケーションの編集/削除」ヘッダーの下に、他の外部アプリケーションとともに表示されます。
アプリケーションのリンクをクリックして、ログインをテストします。
次の例は、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」フィールドを手動で更新する必要があります。この変更は、次の項で説明する「外部アプリケーションの編集」ページで行います。 |