Board Web SSOを使用すると、Webアプリケーションですでに認証済みのユーザは、ユーザ名及びパスワードを再入力せずに、Board Webアプリケーションに接続出来ます。
例えば、企業のWebメールやCRMのシステムを含むWebサイト(ポータル)について考えると、このようなアプリケーションにアクセスするユーザは認証を受ける必要があることは明らかです。Board Webアプリケーションでも、BOARDの分析結果にアクセスするために、ユーザが認証を受ける必要があるとします。Board Web SSOを使用することで、CRMやWebメールのシステムですでに認証済みのユーザは再認証を必要とせずに、Board Webページにアクセス出来ます。従って、認証タスクは単一のシステムで集中管理することが可能になり、Board Webアプリケーションは、他の既存のWebサービスやアプリケーションと完全に統合されます。
ただし、ユーザがメインログインページを経由せずに、Board Webアプリケーションに直接アクセスしようとした場合には、Board Webサーバは未認証のユーザを検出して、ユーザ名及びパスワードの入力を要求します。
ユーザがWindowsドメイン内にログインしていて、Board Webサーバが同じWindowsドメイン(又は信頼されたドメイン)内にある場合、「Windows認証をBoard Webサーバ上で有効にすることが出来ます。これは、ユーザのネットワークログインIDを自動的に認識します。「Board WebサーバのWindows認証」も参照してください。
Board Web SSOのメカニズムは、クッキーの使用に基づいています。
ユーザがメインWebアプリケーションにログオンします。
このWebアプリケーションがユーザを認証し、ログインデータを受け渡してBoard WebサーバのWebサービスを呼び出します。
BOARDの認証に成功した場合、ブラウザに再送信出来る状態の暗号化済みクッキーをWebサービスが返します。
このクッキーにはユーザ名及びパスワードが含まれており、両方ともプライベートキーで暗号化されています。クッキーの作成方式については、後述します。
ユーザがBoard Webサーバページにアクセスしたときに、Board Webサーバはクッキーを検出して、その内容を確認します。
クッキーの内容が有効なBOARDユーザ名及びパスワードである場合、Board Webサーバはそのユーザを認証します。これで、SSOに成功したことになります。
クッキーに含まれているユーザ名/パスワードが無効な場合(ユーザが存在しない場合やパスワードが不正な場合)、ログオンウィンドウが開いて、BOARDの有効なユーザ名/パスワードを入力するよう要求します。
SSOを実装するには、認証を実行するメインWebアプリケーションがBoard WebサーバのWebサービスを呼び出す必要があります。
以下のコードは、このWebサービスの呼び出しをASP.NETで実行する方法を示しています。
protected void login_Click(object sender, EventArgs e)
{
// (Visual Studioでは、[サービス参照の追加]機能で呼び出し可能)
WebClient w = new WebClient();
// 1. 要求を準備
w.Headers.Add("Content-Type", "text/xml");
w.Headers.Add("SOAPAction", "http://schemas.board.com/IBoardAuthenticationService/GetAuthenticationCookie");
string xmlRequest = "
+ "
+ "
+ "
+ "";
// 2. 認証要求をBOARDのWebサービスに送信
string xmlResult = w.UploadString("http://www.mydomain.com:84/authentication","POST", xmlRequest);
// 3. 応答(xml)を読み込み
XmlDocument xdoc = new XmlDocument();
xdoc.InnerXml = xmlResult;
string authenticationCookie = xdoc.ChildNodes[0].ChildNodes[0].ChildNodes[0].ChildNodes[0].InnerText;
if (string.IsNullOrEmpty(authenticationCookie) || authenticationCookie.StartsWith("ERROR"))
{
// 4a. 認証失敗
Result.InnerText = authenticationCookie;
}
else
{
// 認証成功
string[] buff = authenticationCookie.Split(new char[] { '=' });
string cookieName = buff[0];
string cookieValue = buff[1];
// 4b. クッキーはユーザのブラウザに送信可能な状態
Response.Cookies.Add(new HttpCookie(cookieName, cookieValue));
}
}
BOARDセッションを閉じる(ログアウトの実行など)だけで、クッキーはブラウザから削除されます。通常は、過去日付の有効期限を設定します。
HttpCookie expiredCookie = new HttpCookie("EncCredentials");
expiredCookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(expiredCookie);
通常、認証クッキーはランダムに生成されたキーで暗号化されます。ただし、負荷分散を目的として、他のBoard Webサーバを含む、サーバのクラスタ構成でBoard Webサーバが使用されている場合、Board Webサーバの全インスタンスで暗号化キーを共有する必要があります。この場合に限り、以下の図に示すように、Board Webサーバのコンフィギュレーションプログラムでキーを指定する必要があります。