Contract Setup

OPTiM Store のユーザー企業様が御社サービスを利用開始する際に行われる、テナント契約開始処理のAPIです。
御社サービス側に実装頂き、OPTiM Store よりAPIの呼び出しを行います。

Request

Method

  • POST

Resource URL

  • 任意のURL
    • 該当URLを、OPTiM Store 登録時にご連絡ください。
  • 本章では、https://your-service.example.com/contract/api として記載致します。

Header Parameters

Content-Type: application/json

Query Parameters

  • なし

Request Parameters

key type description
contract_statement String Contract Statement AttributesのJSONを署名したJWT形式の文字列

Sample Body

{
  "contract_statement": "eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6Im01ZThpY2lZQ2FoNkNDS3lvSzBrbHBZZnIzNmd1RWRJOHF4QTEwdEFNaG8ifQ.eyJpc3MiOiJodHRwczovL3N0b3JlLm9wdGltLmNvLmpwIiwiYXVkIjoiaHR0cHM6Ly95b3VyLXNlcnZpY2UuZXhhbXBsZS5jb20vY29udHJhY3QvYXBpIiwiY29tcGFueSI6eyJpZCI6ImY0NmY5OTcwYzkxNGFmOWEyMjQ5MTQwMmFhOWVlZGM0YTk2NDVmMmQyYTMwM2EzOTg2N2MzMDRiYTQ2MWM0N2YiLCJuYW1lIjoiIFhYWCIsIndlYnNpdGUiOiJodHRwczovL3h4eC5leGFtcGxlLmNvbSIsImNvbnRhY3QiOiJzeXNhZG1pbkB4eHguZXhhbXBsZS5jb20ifSwibGljZW5jZSI6eyJwb29sIjoxMH0sImNvbnRyYWN0X2p3ayI6eyJraWQiOiIwLUI1SFZJZEhVdThjUE1LU24zandsQTBjdG9mX2FqTlVvYmxuRWpZV3JJIiwia3R5IjoiUlNBIiwiZSI6IkFRQUIiLCJuIjoiNkpOSEZ0bDNhdG9iM3U0NVEyM2ZhdzJtRUFQNGxPWk81UE41aC04UV9OZnFSaTJBRHpIQWRBTTlCU0V6U3dxcGxBV0trcjZZOVBMcldLdnNnRjZxNk4tZjNOSGN6YWEydmZxdDVDVzRHaVdCdlB3MmhaOXkyQjJFekI3NmZJbmdUbjQza0U3MXA1dTZqSVdkZmxrbVRFbUtNVkVtZEM3S1ZSeG9NUVFrWGlHLVFVN1J3X0Zycl9PdEdPblhYaHhUcnoxdHlobTlGam1VMUltSFptMlJpYjVORVg0Z2hBQUlKWnN3Tjh6TjV0RXlKaUdnMWFKNEJmWXJTOUFYRVhRSGFZSlg5S3pidi1VcVlHSWlGSGNQMU1tSzRacVE1S3A4eF9rMElEQTVEVWMzZWNEdzBBeG1fQXJsMUJQOTRZVlBRb2IyRDFYZ3I2cVl0LTJYcDB1eHl3IiwidXNlIjoic2lnIn0sImlhdCI6MTQ2NDA1MzcwNiwiZXhwIjoxNDY0MDU0MzA2fQ.O5FiomvNB6SiSGSlW1TAG4Q_Kesg7s7FfmraAb6G4CIgIq4UHCT8R7CT-ayS8GVT_GB4b40Ruc88Te-baZ2qC0vh3ceIzlNMep8mp4vLhzsxj7MgqGNyKiTjzvaTwLtRLD7Uc_-2-OVPgCha1545BlFxLbcPKRjxaNc5QmmBA6yi0kmCsidk1lfWEKx0vGZZih77g4Wn_k9LMQ4aB4OOkLvpaO0Afi0D-nv91xy2QI-pMDTphNpSqZkZBsNvvtyuEHHbo1qhrUJ81NDdALPUoMcws8TKq7pB5j_NUEY7sfXqgR0FQ5WvBult43Xx7RHvlNqOhpxw9bUQpWBcPstcHQ"
}

Contract Statement Attributes

key type description
iss string リクエスト発行者 (issuer) の識別子です。OPTiM Store の URL となります。
aud string リクエスト受信者 (audience) の識別子です。御社サービスの Tenant Contract API Endpoint URL となります。
company object 実際に御社サービスを利用される OPTiM Store ユーザー企業様の情報です。特に必要が無い場合は無視していただいても結構です。
license object 購入ライセンス数等の情報です。現時点ではライセンス数のみを含みます。
contract_jwk object 各テナント契約ごとに OPTiM 側で生成される RSA 鍵ペアの公開鍵です。契約開始直後 Provisioning の自動設定を行う際に必要になります。
iat integer リクエスト生成日時 (issued_at) を示す Unix Timestamp です。
exp integer リクエストの有効期限 (expires_at) を示す Unix Timestamp です。

Contract Statement Signing Key

  • OPTiM Store の Contract Public Key Endpoint で公開している公開鍵に紐付く秘密鍵
    • 御社サービス側では、該当のエンドポイントで取得した公開鍵を利用し、contract_statementのJWTの署名検証を行ってください。
    • 署名検証については、JOSE実装チュートリアル を参考にしてください。

Contract Statement Sample JSON

{
  "iss": "https://store-xyz.optim.co.jp",
  "aud": "https://your-service.example.com/contract/api",
  "company": {
    "id": "f46f9970c914af9a22491402aa9eedc4a9645f2d2a303a39867c304ba461c47f",
    "name": "株式会社 XXX"
  },
  "license": {
    "pool": 10
  },
  "contract_jwk": {
    "kid": "0-B5HVIdHUu8cPMKSn3jwlA0ctof_ajNUoblnEjYWrI",
    "kty": "RSA",
    "e": "AQAB",
    "n": "6JNHFtl3atob3u45Q23faw2mEAP4lOZO5PN5h-8Q_NfqRi2ADzHAdAM9BSEzSwqplAWKkr6Y9PLrWKvsgF6q6N-f3NHczaa2vfqt5CW4GiWBvPw2hZ9y2B2EzB76fIngTn43kE71p5u6jIWdflkmTEmKMVEmdC7KVRxoMQQkXiG-QU7Rw_Frr_OtGOnXXhxTrz1tyhm9FjmU1ImHZm2Rib5NEX4ghAAIJZswN8zN5tEyJiGg1aJ4BfYrS9AXEXQHaYJX9Kzbv-UqYGIiFHcP1MmK4ZqQ5Kp8x_k0IDA5DUc3ecDw0Axm_Arl1BP94YVPQob2D1Xgr6qYt-2Xp0uxyw",
    "use": "sig"
  },
  "iat": 1464053706,
  "exp": 1464054306
}

Response

御社サービス側でリクエストを承認された場合、下記に従ったレスポンスを返却してください。

Response Code

201 Created

Response Parameters

key type description
iss string レスポンス発行者 (issuer) の識別子です。御社サービスの Tenant Contract API Endpoint URL となります。
aud string レスポンス受信者 (audience) の識別子です。OPTiM Store の URL となります。
contract_jwk object 各テナント契約ごとに御社サービス側で生成いただく RSA 鍵ペアの公開鍵です。契約開始直後 Federation の自動設定を行う際に必要になります。
iat integer レスポンス生成日時 (issued_at) を示す Unix Timestamp です。
exp integer レスポンスの有効期限 (expires_at) を示す Unix Timestamp です。

Sample Body

{
  "iss": "https://your-service.example.com/contract/api",
  "aud": "https://store-xyz.optim.co.jp",
  "contract_jwk": {
    "kid": "u67PW3Rc0To3t_4fPz3Cwb0fuxICXXhI8SwBnak4C6Q",
    "kty": "RSA",
    "e": "AQAB",
    "n": "yUB7KMp_ZsEbK734sMPjRSPfM7pV0Jf5KyjkkXk5Mw6Jja8z-ZTigqaoJVcV4tFX2CyTqDmVNgzb9oQJL62otjDWRwdFL99Rdor_YsxZt2eOSnBBY8PdhjYHTJtczIXsCHtYtx0clYcjMjvwNG_FIL4UJILmiHPxMMmWxPjEtTIo0pp8KdrrGZExJp4UD7JC7nPiNdvs31GHV0IoXpxqQAatfFBwQHFG3Fxsz7JS9p3mf_VBZ2CyPsdS58NqMPQVBbyxsdbK_OiPOk-4dmlJtxZFTMjXoBg4-hL9B1rRrUrN5ttm7QjJr3wjnKUy_OdKsqjxhPaj7XV04TuxBhxzOw"
  },
  "iat": 1464053706,
  "exp": 1464054306
}

契約成立後の処理

本APIにより、OPTiM Store / 御社サービス双方で当該契約に紐づく RSA 鍵ペアが生成され、相互に公開鍵を交換完了した状態になります。
契約成立後は、自身の持つテナント契約毎の秘密鍵を使って署名したリクエストを送信し、相手の公開鍵でその署名を検証することができるようになります。

Provisioning / Federation の各システム連携に用いる OAuth / OpenID Connect Client の自動登録には、上記鍵ペアを利用します。
そのため、本APIで交換したお互いの秘密鍵/公開鍵はデーターベースなどに契約と紐付けた形で保持してください。