ルーティングアクション
デバイスID管理
このアクションは、CHIPIN_DEVICE_CONTEXT Cookie が存在しない場合、新しいデバイスIDをを発行します。 デバイスIDはPRNG(擬似乱数生成器)を使用して生成された48ビットの数値で、base64で 64文字の文字列にエンコードされます。
CHIPIN_DEVICE_CONTEXT Cookie が存在する場合は、JWTを検証し、 iss, exp の妥当性をチェックします。 sub の値をデバイスIDとして使用します。有効期限が再発行閾値を過ぎている場合は、CHIPIN_DEVICE_CONTEXT Cookie を再発行します。 exp 以外の値は引き継がれます。 デバイスIDはメモリ上に保存して管理しているわけではないので、サーバ側で無効化することはできません。セッションの有効期限が切れるまで有効です。
新しくデバイスIDを生成した場合、および再発行した場合はレスポンスヘッダに Cookie を以下のように追加します。
Set-Cookie: CHIPIN_DEVICE_CONTEXT=*JWT*;HttpOnly;Secure;SameSite=Strict;
サブドメインに shareCookie: true が設定されている場合は、CHIPIN_DEVICE_CONTEXT Cookie の Domain 属性にサブドメインの FQDN を設定します。 これにより、同じサブドメイン配下の仮想ホスト間でセッションを共有できます。
JWTのクレームは API Gateway のリクエストオブジェクトの変数として保存されます。 JWTのクレームおよびリクエストオブジェクト上の変数名は以下の通りです。
クレーム名 | 型 | 説明 | 変数名 |
---|---|---|---|
iss | string | デバイスIDを発行した仮想ホストのFQDN | session_originator |
sub | string | デバイスID. | session_id |
iat | integer | 発行日時(UNIXタイムスタンプ) | session_start_at |
exp | integer | 有効期限(UNIXタイムスタンプ) | session_expire_at |
type required | string Value: "setSessionId" |
expiration | integer Default: 15552000 デバイスIDの有効期限。単位は秒で、デフォルトは 15552000 秒 (180日)。 この時間の半分を過ぎると、CHIPIN_DEVICE_CONTEXT Cookie が再発行される。 この時間を過ぎると、デバイスIDは無効となる。 |
{- "type": "setSessionId",
- "expiration": 15552000
}
サービス確認
このアクションは、SPN Hub 上で指定されたサービスが利用可能かどうかをチェックします。 利用可能である場合は、アクションは成功しますが、利用可能でない場合は 503 Service Unavailable エラーを返します。 そのレスポンスでは JavaScript により /.waitforAvailable の SSE を取得してサービスが利用可能になるのを待ちます。
type required | string Value: "checkoutServices" |
services | Array of strings <urn> [ items <urn > ] |
{- "type": "checkoutServices",
- "services": [
- "urn:chip-in:service:example-realm:hub1:authz-rbac"
]
}
プロキシ
リクエストをプロキシ先のサービスに転送するためのアクションです。 前フェーズまでで作成されたレスポンスは破棄され、プロキシ先サービスから返却されたものが新しいレスポンスとなります。 このアクションは、リクエストを別のマイクロサービスに転送するために使用されます。
type required | string Value: "proxy" |
target required | string プロキシ先サービスのURN。 |
noBody | boolean true の場合、リクエストボディは転送されない。 デフォルトは false で、リクエストボディは転送される。 |
{- "type": "proxy",
- "target": "\"urn:chip-in:service:example-realm:cms-service\"",
- "noBody": false
}
リダイレクト
リダイレクトを行うためのアクション。レスポンスの stauts は 302 に設定される。 リダイレクト先のURLは、レスポンスの Location ヘッダに設定される。 このアクションは、リクエストを別のURLに転送するために使用される。
type required | string Value: "redirect" |
target | string レスポンスの Location ヘッダに設定されるリダイレクト先のURL。 |
{- "type": "redirect",
}
ジャンプ
別のルーティングチェーンにリクエストを転送するためのアクション。処理中のチェーンは終了し、転送先のチェーンが新たに開始される。
type required | string Value: "jump" |
target required | string ルーティングチェーンのURN。 |
{- "type": "jump",
- "target": "urn:chip-in:routing-chain:example-realm:cms-chain"
}
変数設定
evalexpr の式を評価して、変数に値を設定するアクション。 このアクションは、リクエストやレスポンスの情報を参照して、変数に値を設定するために使用される。
type required | string Value: "setVariables" |
required | object 設定する変数のキーと値のペア。 |
{- "type": "setVariables",
- "variables": {
- "savedCookie": "SESSION={{request.sessionID}}; Path=/; Secure; HttpOnly"
}
}
ヘッダー設定
HTTP ヘッダーの設定を行うためのアクション。 このアクションは、リクエストやレスポンスのヘッダを設定するために使用される。
type required | string Value: "setHeaders" |
target required | string Enum: "request" "response" ヘッダの設定先。request の場合はリクエストヘッダ、response の場合はレスポンスヘッダ。 |
required | object 設定するヘッダのキーと値のペア。 |
{- "type": "setHeaders",
- "target": "response",
- "headers": {
- "content-type": "application/json",
- "X-Forwarded-For": "{{request.clientIp}}"
}
}
BFF 認証
BFFとしての認証を行う。