5.8.2. Native アプリケーション (C#)

.NET(C#) による SAML 認証の実装方法を記載します。

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

  • SAML 認証結果を受け取るためのリスナーを作成
  • SAML 認証開始 REST API の実行
  • SAML 認証完了時の処理
  • BaaS サーバへのログイン

リスナー登録

SAML 認証結果を受け取るための HTTP リスナーを作成します。

string redirectUri = "http://localhost:8080/receiveToken/";

// HTTPリスナー作成
HttpListener listener = new HttpListener();
listener.Prefixes.Clear();
listener.Prefixes.Add(redirectUri);

// リスナー開始
listener.Start();

SAML認証開始

ブラウザを起動して SAML 認証開始の REST API を実行します。

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

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

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

string encodeUri = System.Web.HttpUtility.UrlEncode(redirectUri);

// ブラウザを起動して REST API 実行
System.Diagnostics.Process.Start(<EndpointUrl> + "/1/" + <tenantId> + "/auth/saml/init" + "?redirect=" + encodeUri);

SAML認証完了時の処理

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

http://localhost:8080/receiveToken?token=123456789abcdef

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

// リクエスト待ち
HttpListenerContext context = listener.GetContext();

// リクエスト取得
HttpListenerRequest req = context.Request;

// リクエスト文字列取得
string reqStr = req.RawUrl;

// ワンタイムトークン取得
string onetimeToken = req.QueryString.Get("token");

BaaS サーバへのログイン

ワンタイムトークンを指定してログインします。

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

// ログイン用のパラメータ作成
var param = new NbUser.LoginParam() { Token = onetimeToken };

// ログイン
var user = await NbUser.LoginAsync(param, service);