この付録では、ログアウトを構成してシングル・サインオンのセッション中にアクセスしたすべてのアプリケーション(Oracle Access Managerに統合されているサード・パーティ・アプリケーションを含む)からログアウトできるようにする方法について説明します。
この付録の内容は次のとおりです。
フォーム・ベース認証を使用している場合は、セッションCookieを削除し、ユーザーをログアウト・ページにリダイレクトするログアウトURLを構成することによって、1つ以上のアプリケーションからユーザーを自動的にログアウトさせることができます。メタ・タグを追加し、数秒後に別のページにリダイレクトされるようにするなど、デフォルトのログアウト・ページをカスタマイズできます。
注意: 他の保護されたリソースだけでなく、アイデンティティ・システムのアプリケーションとポリシー・マネージャに対してもログアウト・リンクおよびURLを構成する必要があります。詳細は、「アイデンティティ・システム・リソースに対するログアウトの構成」を参照してください。 |
ログアウトの構成には、次の方法を使用できます。
Oracle Access Managerに付属の1つのログアウト機能を使用: ユーザーのセッションCookieを削除するシングル・サインオン・ログアウトURLおよびログアウト・ページを構成できます。
詳細は、「シングル・サインオン・ログアウトURLの構成」を参照してください。
複数のログアウト機能を使用: Oracle Access Managerのデフォルトに基づいて様々な用途に対応した各種のログアウトURLおよびログアウト・ページを構成できます。
ユーザーのログアウト用サード・パーティ・プログラムを使用: 独自のログアウト機能を定義できます。
注意: マルチドメインのシングル・サインオンを構成している場合は、ログアウトURLでは1つのドメインのアプリケーションからのみユーザーをログアウトする点に留意してください。ドメイン全体でログアウトが行われるようにするには、絶対セッション・タイムアウト値の設定が必要な場合もあります。詳細は、「シングル・ドメインのシングル・サインオン・セッションからのログアウト」を参照してください。 |
WebGateでは、logout.gifおよびlogout.jpgを除いて、「logout.」(ピリオド「.」を含む)が含まれたURL(logout.htmlやlogout.plなど)を受信するとユーザーをログアウトします。WebGateでこの文字列を含むURLを受信すると、ObSSOCookieの値はlogoutに設定されます。
アクセス・システムでは、WebGateで保護されたリソースにアクセスする各ユーザーまたは各アプリケーションに対してObSSOCookieを設定します。ObSSOCookieにより、同等かそれ以下の認証レベルを持つアクセス・システムで保護されたリソースへのアクセスが可能になります。ObSSOcookieを削除すると、WebGateによりユーザーがログアウトされ、このユーザーがアクセス・システムで保護されているリソースへのアクセスを次回リクエストするときに再認証が必要になります。
Oracleではlogout.htmlページが用意されています。このフォームは次の場所にあります。
PolicyManager_install_dir
/access/oblix/lang/en-us/logout.html
logout.htmlフォームにも、アイデンティティ・システム用に設定されたObTemC Cookieを削除するためのJavaScriptが含まれています。ただし、このページにはデフォルトでObSSOCookieを削除するコードが含まれていません。通常、シングル・サインオン・ログアウトURLを呼び出しても、必ずしもObSSOCookieが削除されるわけではないため、手動でlogout.htmlにこのコードを追加する必要があります。
logout.htmlフォームでも、サード・パーティ・アプリケーションによって設定されたCookieは削除されません。ユーザーの再認証が必要となるようにするには、シングル・サインオンのlogout.htmlファイルをカスタマイズしてこのCookieが削除されるようにする必要があります。
このページをカスタマイズすることも、1つ以上のカスタム・ログアウト・ページを作成することもできます。
すべてのユーザーとリソースに適用できる、1つのシングル・サインオン・ログアウトURLおよびページを構成できます。あるいは、異なるアプリケーションごとに別のログアウト機能を作成することもできます。
デフォルトのlogout.htmlを変更するか、新しいログアウト・ページを作成します。
ファイル名には文字列「logout.」(「.」を含む)を含めます(logout.htmlやlogout.plなど)。ただし、logout.gifおよびlogout.jpgは除きます。
このページは、セッションCookieとonLoadイベントを削除してボディ・タグでコードを実行するJavaScriptコードを含んでいる必要があります。次に例を示します。
<body onLoad="delOblixCookie";>
該当するすべてのWebサーバーで同じ相対パスにページを配置します。
たとえば、SSOログアウトURLが/public/logout/logout.htmlである場合、このファイルはログアウト・リンクのあるすべてのページを含むWebサーバーに認識される必要があります。
匿名認証スキームを使用するポリシーのあるログアウト・ページを保護して、誰でもアクセスできるようにします。
これは、SSOログアウトURLおよびカスタムURLの場合に当てはまります。たとえば、SSOログアウトURLが/public/logout/logout.htmlである場合は、このリソースが/public、/public/logoutまたは/public/logout/logout.htmlで保護されるようにします。
確実にOracle Access ManagerによってログアウトURLが認識されるようにします。
複数のログアウト・ページを構成した場合は、WebGate用のログアウトURLパラメータに追加します。詳細は、「アクセス・ゲート構成パラメータ」を参照してください。
SSOログアウトURLを構成します。
詳細は、「シングル・サインオン・ログアウトURLの構成」を参照してください。また、logoutURLsパラメータのURLのリストにSSOログアウトURLを追加する必要もあります。
そのURLを必要とするすべてのWebページで該当するログアウトURLのあるリンクを追加します。
Oracle Access Managerと別の製品間のシングル・サインオンを構成した場合、サード・パーティ製品からログアウトしてもOracle Access Managerのセッションは自動的に終了しません。たとえば、Oracle Access ManagerとOracleのSiebel製品間のシングル・サインオンを構成した場合、Siebelからログアウトするとき、Oracle Access Managerからもログアウトするとはかぎりません。
この付録の前の項に記載されているように、この場合はシングル・サインオフを構成できます。シングル・サインオフを使用する場合は、少なくともObTEMCとObSSOCookieは、確実に削除する必要があります。
Oracle Access Managerに付属のデフォルトのlogout.htmlファイルは次のとおりです。
PolicyManager_install_dir/access/oblix/lang/en-us/logout.html
このファイルを変更して、ユーザーがシングル・サインオン・セッションで起動したすべてのアプリケーション・セッションからログアウトする必要がある場合は、JavaScript関数を追加してOracle Access Managerおよびその他のアプリケーションが使用しているすべてのCookieを削除する必要があります。Oracle Access Managerの場合、ログアウト・ページのロード時に、次のCookieを削除する必要があります。
ObTEMC
ObSSOCookie
その他のアプリケーションの場合、各アプリケーションによって設定されたCookieを削除します。たとえば、ユーザーをMyAppからログアウトするとき、このアプリケーションがMYAPP_COOKIEを設定する場合は、次のCookieも削除します。
MYAPP_COOKIE
シングル・サインオン・セッションに含まれる様々なサーバーに関連するCookieも削除する必要があります。次に例を示します。
OHS-idm.demo.mycompany.com-7777
OHS-idm.demo.mycompany.com-7778
例B-1に示すlogout.htmlページには、JavaScript関数delCookie
が含まれています。この関数は、ユーザーのブラウザにログアウト・ページをロードするときにコールされます。この関数によって、Oracle Access Manager関連のすべてのCookieが削除されます。
例B-1では、myCustomAppというアプリケーションが設定するmyCustomAppというCookieを削除して、アプリケーションのシングル・サインオフを実行します。この例では、myCustomAppへのログインに必要なデータがCookieに含まれていることを想定しています。このアプリケーションは、Cookieが存在するかぎり、ユーザーがログインしたままであるとみなします。この例では、太字で示された行を追加して、myCustomAppというCookieを削除します。これにより、アプリケーションに関連するすべてのCookieが削除されるため、ユーザーのブラウザにログアウト・ページをロードするときに適切なログアウトが確実に実行されます。
デフォルトのlogout.htmlページに類似のJavaScript関数を追加する場合は、その関数によって、関連するCookieがすべて削除されることを確認してください。これらはアプリケーションのセッション状態を制御するCookieです。Cookieを使用してセッション状態を制御しないアプリケーションの場合は、そのアプリケーションに適切な方法を使用してシングル・サインオフを構成する必要があることに注意してください。
例B-1 myCustomAppというCookieを削除するシングル・サインオフの例
<html> <head><link rel="stylesheet" type="text/css" href="style2/coreid.css"></link> <meta http-equiv="Content-Type" content="text/html; "> <meta name="Description" content="Oracle Access Manager"> <meta name="Robot" content="none"> <meta name="Copyright" content="Copyright © 1996-2006, Oracle. All Rights Reserved."> <style type="text/css"> <!-- .unnamed1 { font-family: Arial, Helvetica, sans-serif; font-size: 2pt} --> </style> <title>Oracle Access Manager</title> <script language="JavaScript"> function delCookie(name,path,domain) { var today = new Date(); var deleteDate = new Date(today.getTime() - 48 * 60 * 60 * 1000); // minus 2 days var cookie = name + "=" + ((path == null) ? "" : "; path=" + path) + ((domain == null) ? "" : "; domain=" + domain) + "; expires=" + deleteDate; document.cookie = cookie; } function delOblixCookie() { // set focus to ok button var isNetscape = (document.layers); if (isNetscape == false || navigator.appVersion.charAt(0) >= 5) { for (var i=0; i<document.links.length; i++) { if (document.links[i].href == "javascript:top.close()") { document.links[i].focus(); break; } } } delCookie('ObTEMC', '/'); delCookie('ObSSOCookie', '/');// Added myCustomAppCookie deletion
delCookie('myCustomApp', '/');
// in case cookieDomain is configured // delete same cookie from all subdomains var subdomain; var domain = new String(document.domain); var index = domain.indexOf("."); while (index > 0) { subdomain = domain.substring(index, domain.length); if (subdomain.indexOf(".", 1) > 0) { delCookie('ObTEMC', '/', subdomain); delCookie('ObSSOCookie', '/', subdomain); } domain = subdomain; index = domain.indexOf(".", 1); } } </script> </head> <body bgcolor="#ffffff" marginwidth="0" marginheight="0" topmargin="0" leftmargin="0" onload="delOblixCookie();"> <table width="100%" border="0" cellspacing="1" cellpadding="0"> <tr> <td rowspan="2" width="10%" bgcolor="#FFFFFF" align="center" valign="middle"> <img src="style2/LOGINoblixlogo.gif"/></td> </tr> <tr> <td bgcolor="#0099CC" align="center" valign="middle"><img src="style2/LOGINaccesssystem.gif"/><br/></td> <td bgcolor="#99CCCC" align="center" valign="middle"><img src="style2/LOGINversion.gif"/></td> </tr> <tr> <td> </td> <td align="right" valign="top"> <table border="0" cellspacing="0" cellpadding="0"> <tr align="right" valign="middle"> <td> <a href="http://www.oracle.com"><font class="basictextfonts3" size="2" color="#003366"><b>Oracle Website</b></font></a> | <a href="http://www.oracle.com/support/contact.html"> <font class="basictextfonts3" size="2" color="#003366"><b>Online Support</b></font></a> </td> </tr> </table> </td> <td> </td> </tr> <tr> <td> </td> <td align="center"> <br/> <h3>Oracle Access Manager Applications</h3> <h3>You have been logged out.</h3> <h3>For security reasons, please close the browser window. </h3> </font> <a href="javascript:top.close()" onMouseOver="self.status='Close the browser window.'; return true"> <img border="0" alt="Close the browser window." src="style2/NAVok.gif"> </a></center> </td> <td> </td> </tr> <tr> <td> </td> <td> <hr/> <font class="basictextfonts3" size="1"> Copyright © 1996-2006,Oracle. All rights reserved. US Patent Numbers 6,539,379; 6,675,261; 6,782,379; 6,816,871. Portions copyright © 1991-2003, Compuware Corporation. Includes RSA BSAFE® cryptographic or security protocol software from RSA Security. Copyright © 2003, RSA Security Inc. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. </font> </td> <td> </td> </tr> </table> </body> </html>