ユーザーとセッション
ユーザー認証
4D Server上で RESTセッションを開くには、まずリクエストを送信するユーザーが認証されなければなりません。
アプリケーションにユーザーをログインするには、ユーザー名とパスワードを $directory/login
に送信します。
ユーザーのログインと同時にセッションが開かれます。 以降のクライアントリクエストにおけるセッションcookie の扱い方については、後述を参照ください。
セッションは、タイムアウトすると自動終了します。
セッションcookie
4D Server上では、各 RESTリクエストは専用セッションを介して処理されます。
最初の有効な RESTリクエストを受信すると、サーバーはセッションを生成し、"Set-Cookie" レスポンスヘッダー に、セッションUUID を格納した WASID4D
という名前のセッションcookie を返します。例:
WASID4D=EA0400C4D58FF04F94C0A4XXXXXX3
以降の RESTリクエストにおいては、"Cookie" リクエストヘッダー にこの cookie を含めるようにします。これにより、同じセッションを利用し続けることができます。 そうしない場合には新規セッションが開かれることとなり、したがってライセンスが別途消費されます。
例題
実際のところ、セッションcookie の扱いは HTTPクライアントに寄ります。 この例題では、4D の HTTP Request
コマンドを使ってリクエストを処理する場合に、セッションcookie を抽出し、再送信する方法を示します:
// ヘッダーを作成します
ARRAY TEXT(headerNames;0)
ARRAY TEXT(headerValues;0)
APPEND TO ARRAY(headerNames;"username-4D")
APPEND TO ARRAY(headerNames;"session-4D-length")
APPEND TO ARRAY(headerNames;"hashed-password-4D")
APPEND TO ARRAY(headerValues;"kind user")
APPEND TO ARRAY(headerValues;"60")
APPEND TO ARRAY(headerValues;Generate digest("test";4D digest))
C_OBJECT($response)
$response:=New object
// このリクエストは "kind user" というユーザーのセッションを開きます
$result:=HTTP Request(HTTP POST method;"127.0.0.1:8044/rest/$directory/login";"";\
$response;headerNames;headerValues;*)
// 以降のリクエストヘッダー用に cookie WASID4D のみを格納した配列を作成します
buildHeader(->headerNames;->headerValues)
// 次のリクエストは新規セッションを開きません
$result:=HTTP Request(HTTP GET method;"127.0.0.1:8044/rest/$catalog";"";\
$response;headerNames;headerValues;*)
// buildHeader プロジェクトメソッド
C_POINTER($pointerNames;$1;$pointerValues;$2)
ARRAY TEXT($headerNames;0)
ARRAY TEXT($headerValues;0)
COPY ARRAY($1->;$headerNames)
COPY ARRAY($2->;$headerValues)
$indexCookie:=Find in array($headerValues;"WASID4D@")
$cookie:=$headerValues{$indexCookie}
$start:=Position("WASID4D";$cookie)
$end:=Position(";";$cookie)
$uuid:= Substring($cookie;$start;$end-$start)
ARRAY TEXT($headerNames;1)
ARRAY TEXT($headerValues;1)
$headerNames{1}:="Cookie"
$headerValues{1}:=$uuid
COPY ARRAY($headerNames;$1->)
COPY ARRAY($headerValues;$2->)