Web SSO(Single Sign-On:シングルサインオン)

Board Web SSO(Single Sign-On:シングルサインオン)の基本概念

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認証」も参照してください。

Web SSOの仕組み

Board Web SSOのメカニズムは、クッキーの使用に基づいています。

Board Web SSOの設定方法

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 = ""

                      + ""

                      + "" + HttpUtility.UrlEncode(username.Text) + ""

                      + "" + HttpUtility.UrlEncode(pwd.Text) + ""

                      + "";

        // 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サーバの全インスタンスで暗号化キーを共有する必要があります。この場合に限り、以下の図に示すように、Board Webサーバのコンフィギュレーションプログラムでキーを指定する必要があります。

 

Board_Web_Server_Config_SSO.png