シングルサインオンを行う

Forguncyアプリケーション以外のアプリケーションやシステムが存在する場合、フォーム認証の場合においては、それぞれのシステムやアプリケーションでユーザー名とパスワードの入力を行う必要があります。Forguncyでは既存システムやアプリケーションからForguncyアプリケーションへと遷移する際に、ユーザーがユーザー名やパスワードを入力することなくログインした状態となる認証連携機能を提供しています。なお、本機能はWindows認証では使用できません。

Forguncyの認証連携機能は、以下の図のような流れで行われます。

1. ユーザーのトークンを要求します。

ユーザーのトークンを要求するには、以下の仕様を満たしたHTTPリクエストを行います。

送信先

http://<サーバー名>/<アプリケーションパス>/SSO/GetUserToken

HTTPメソッド

POST

 メッセージボディ

認証させたいForguncyのユーザー名と認証連携用パスワードを持つJSON

例)
{userName:"user1", password:"6s6s6s6s6s6s"}

 上記のメッセージボディに含まれるパスワードは、他のアプリケーションからログインを許可した場合に設定されるアプリケーションで共通のパスワードです。このパスワードは、以下の場所で確認、および変更を行うことが可能です。

[ファイル]→[オプション]→[アプリケーション連携]を選択して、[他のアプリケーションからのログインを許可する]をチェックします。

[他のアプリケーションからのログインを許可する]がチェックされていなければ、ユーザーのトークンを要求することはできません。

2. ユーザートークンを受け取る。

トークンを要求するHTTPリクエストが成功した場合、そのレスポンスとしてトークンが返されます。トークンを要求するHTTPリクエストが失敗した場合、返されるトークンは「Error:」の文字列から始まります。

3. トークンをURLのクエリパラメータとして指定して、遷移したいForguncyアプリケーションのページに遷移します。

http://<サーバー名>/<アプリケーションパス>/?token=1h1h1h1h-1h1h-1h1h-1h1h-1h1h1h1h1h1h

2の手順でトークンを受け取ってから、3の手順を行うまでの制限時間は、既定では10秒に設定されています。これを変更する場合には、以下の手順で行います。

[ファイル]→[オプション]→[アプリケーション連携]を選択して、[トークンの有効期限]を変更します。

サンプルコード

C#の場合のサンプルコードを以下に示します。

 var baseUrl = "http://localhost/app1";
var userName = "user1";
var password = "6s6s6s6s6s6s";
HttpWebRequest rq = HttpWebRequest.Create(baseUrl + "/SSO/GetUserToken") as HttpWebRequest;
rq.Method = WebRequestMethods.Http.Post;
rq.Accept = "application/json";
rq.ContentType = "application/json";
var loginStr = "{userName:\"" + userName + "\", password:\"" + password + "\"}";
var data = Encoding.UTF8.GetBytes(loginStr);
using (Stream stream = rq.GetRequestStream())
{
    stream.Write(data, 0, data.Length);
}
var response = rq.GetResponse();
var token = new StreamReader(response.GetResponseStream()).ReadToEnd();
if(token.StartsWith("Error:"))
{
    MessageBox.Show(token);
    return;
}
Process.Start(baseUrl + "?token=" + token);