コンテンツにスキップ

Session API

セッションAPIはセッショントークンを発行し、トークンを用いて各種APIにアクセスする機能とセッション機能を提供するAPIです。

実行手順

Session APIでは JSON-RPC v2.0 を利用します。

JSON-RPC を用いてSession APIを実行するには、 JSON 形式で記述した リクエストデータ(文字列)を EvWH が提供するウェブサービスのエンドポイントの URL に POST してください。

リクエストヘッダ

当APIの利用にはAPIキーと秘密鍵が必要です。システムの管理者に申請して取得してください。 HTTPリクエスト送信時のHTTPヘッダ部に、それぞれ下記のヘッダ名で送信する必要があります。 - APIキー:APIKey - 秘密鍵:Secret

セッショントークンの仕様

session.open_session で発行したセッショントークンに関する仕様・使用方法は下記の通りです。

  • Xdata-Session-Token ヘッダーで、セッショントークンを指定できます。
  • セッショントークンは、発行に使用した Apikey, Secret に応じた認可が行われます(セッショントークンは、紐づけられたApikey, Secret に解決されます)。
  • Xdata-Session-Token ヘッダーと一緒に APIKey Secret ヘッダーを渡した場合、Xdata-Session-Token ヘッダーが優先されます。
  • Xdata-Session-Token は、内部的にセッションId に解決され、 バックエンドへのリクエスト時に Xdata-Session-Id のヘッダーとして付与します。
  • バックエンド(現状は dataproc のみ対応)は、Xdata-Session-Id を使用してセッションを実現します(実装や活用方法はアプリ毎に異なります)。
  • セッショントークンを用いると、dataproc でセッションディレクトリ(同一セッションからのみアクセス可能なセッション内の共有ディレクトリ)を使用できます。

セッショントークンの将来的な構想

将来的に、セッショントークンの払い出し時に認可スコープを付与し、アクセスコントールできる機能を検討しています。 現状、Apikeyがその役割を持ちますが、Apikey はセッショントークンの払い出しのみ可能にするなど、セッショントークンとの役割を整理し、セキュリティを担保した柔軟な運用を目指していきます。

つきまして、セッショントークンを活用頂くようお願いします。

セッショントークンの使用方法

session.open_session で発行されたセッショントークン(アクセストークン)の使用例は下記の通りです。

curl -H "Content-type:application/json" -H "Xdata-Session-Token: 0df23f0d-44cb-4085-8ac9-158e6ced3056" -X POST -d '{"id":1, "jsonrpc": "2.0", "method": "dataproc.get_server_version","params": {}}' http://localhost/api/v1/dataproc/jsonrpc

Python クライアントを用いる場合の使用例は下記の通りです。

import os
import json
from xdata_session.client import ApiV2 as SessionApi
from xdata_dataproc.client import ApiV2 as DataprocApi

# セッショントークンを取得する

if not os.path.exists("~/xdata_token.json"):
  # 新たにセッショントークンを発行する場合
  session_endpoint = "http://localhost/api/v1/session/jsonrpc"
  apikey = "xxx"
  secret = "xxx"

  session_client = SessionApi(session_endpoint, apikey, secret)
  result = session_client.open_session()

  # 必要に応じてセッショントークンを保存する
  with open("~/.xdata_cache/xdata_token.json", "w") as f:
    json.dump(result, f)
  else:
  # json 形式で保存したセッショントークンを読み込む場合
  with open("~/.xdata_cache/xdata_token.json") as f:
    result = json.load(f)

session_token = result["access_token"]

# dataproc を2回実行し、2つの成果物を、セッションディレクトリ内に保存する
dataproc_endpoint = "http://localhost/api/v1/dataproc/jsonrpc"
dataproc_client = DataprocApi(dataproc_endpoint, session_token=session_token)

params = dict(
  module="test-module",
  method="session-test",
  input={},
  output={},
  params={},
)

result1 = dataproc_client.exec(**params)
result2 = dataproc_client.exec(**params)

エンドポイント

当APIのエンドポイントは https://<対象ホスト>/api/v1/session/jsonrpc となります。