5.8.1. Web アプリケーション

JavaScript を使った SAML 認証方法を記載します。

大きく分けて、以下の3つの処理を実装します。

  • SAML 認証開始 REST API の実行
  • SAML 認証完了時の処理
  • BaaS サーバへのログイン

SAML認証開始

SAML 認証開始の REST API を実行します。 リクエストパラメータに、ランディングページの URL を指定します。

REST API の URI は、以下のとおりです。

{endpointUri}/1/{tenantId}/auth/saml/init?redirect={redirectUri}

以下にサンプルコードを示します。

例: index.html

<script>

function convertAbsUrl(src) {
    return $("<a>").attr("href", src).get(0).href;
}

function startSaml() {
    var redirectUri = convertAbsUrl("./landing.html");

    // REST API 実行 (ページ移動)
    var startUri = <EndpointUri> + "/1/" + <tenantId> + "/auth/saml/init?redirect=" + encodeURIComponent(redirectUri);
    document.location.href = startUri;
};

</script>

<a href="#" onclick="startSaml();">Start authentication</a>

SAML認証完了時の処理

SAML 認証が完了すると、指定したリダイレクト URI (ランディングページ)にリダイレクトされます。 リダイレクト URI は以下のようにワンタイムトークンがクエリパラメータに格納された形になります。

ランディングページ(例: landing.html) はあらかじめ用意しておきます。

リダイレクト URI からワンタイムトークンを取り出します。 以下にサンプルコードを示します。

例: landing.html

$(function() {
    // クエリパラメータからワンタイムトークンを取得
    var getOneTimeToken = function() {
        var query = document.location.search.substring(1);
        var params = query.split('&');
        for (var i = 0; i < params.length; i++) {
            var el = params[i].split('=');
            var name = decodeURIComponent(el[0]);
            if (name === "token") {
                return decodeURIComponent(el[1]);
            }
        }
        return null;
    };

    var oneTimeToken = getOneTimeToken();

    // BaaS サーバへのログイン実装(下記参照)
    //・・・
});

BaaS サーバへのログイン

JavaScript SDK のログイン API を使い、ワンタイムトークンを指定してログインします。

サーバからセッショントークンが払いだされ、以降は本セッショントークンで認証が行われます。 以下にサンプルコードを示します。

例: landing.html

<script>
$(function() {
    // SAML認証完了時の処理 (上記参照)
    ・・・

    // Nebula 初期化
    Nebula.initialize(NebulaConfig);

    // ワンタイムトークンを指定
    var userInfo = {
        token: oneTimeToken,
        username: "",
        password: ""
    };

    // ログイン
    Nebula.User.login(userInfo)
        .then(function(user) {
            // login ok
            $("#result").text("Login succeeded: username=" + user.username);
        })
        .catch(function(err) {
            // login failure
            $("#result").text("Login failed: " + err);
        });
});

</script>

Result:<br/>
<div id="result"></div>

NebulaConfig には接続先のBaaS設定情報を指定してください。

詳しくは JavaScript SDK マニュアルを参照してください。