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ヘッダーと一緒にAPIKeySecretヘッダーを渡した場合、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 となります。