コンテンツにスキップ

Client Credentialsフロー

Client Credentialsフローは、サインインしたユーザーなしで組織の代理として動作するサーバー間統合に使用します。このガイドでは、OAuthアプリケーションの作成から最初のAPI呼び出しまでを説明します。

前提条件、ネットワークアクセス、セキュリティモデルをまだ確認していない場合は、先にセットアップガイドを読んでください。


  1. OAuthアプリケーションを作成する — Prevu3Dにアプリを登録し、認証情報を取得する
  2. サービスユーザーのアクセスを設定する — アプリに必要なデータへのアクセスを付与する
  3. アクセストークンを取得する — 認証してAPIを使用するためのトークンを受け取る
  4. API URLを見つける — 組織のベースURLを確認する(リージョンによって異なります)
  5. 最初の呼び出しを行う — 簡単なリクエストで接続をテストする

ステップ1:OAuthアプリケーションを作成する

Section titled “ステップ1:OAuthアプリケーションを作成する”
  1. Prevu3D Platformにログインします。
  2. SettingsOAuthに移動します。
  3. 新しいアプリケーションを作成するにはクリックします。
  4. OAuthフローとしてClient Credentialsを選択します。
  5. アプリケーションに必要な権限を割り当てます(これによりレイヤー1:OAuthスコープが設定されます)。組織管理者が必要なスコープの決定を手伝ってくれます。
  6. 作成ボタンをクリックします。
  7. Client IDClient Secretをコピーして安全に保管します。すべてのAPIリクエストで必要になります。

ステップ2:サービスユーザーのアクセスを設定する

Section titled “ステップ2:サービスユーザーのアクセスを設定する”

OAuthアプリケーションを作成すると、組織内に対応するサービスユーザーが自動的に作成されます。このサービスユーザーはAPIとのやり取り時にアプリケーションを表しますが、まだアクセス権はありません。

このステップでは、セキュリティモデルのレイヤー2と3をカバーします。サービスユーザーが表示できるノード(コンテンツアクセス)と、それらに対して実行できる操作(ロール/権限アクセス)です。

  1. SettingsUsersに移動します。
  2. サービスユーザーを見つけ、編集ボタンをクリックします(作成したOAuthアプリケーションと同様の名前のはずです)。
  3. ユースケースに必要なノード(組織、ディビジョン、サイトなど)へのコンテンツアクセスをサービスユーザーに付与します。
  4. サービスユーザーが必要な操作(読み取り、編集、管理など)を実行できるよう、それらのノードに適切なロール/権限を割り当てます。
  5. 変更を確認します。

ステップ3:アクセストークンを取得する

Section titled “ステップ3:アクセストークンを取得する”

APIを呼び出すには、まずアクセストークンが必要です。Client IDとClient Secretを使用して、トークンエンドポイントにリクエストを送信します。

エンドポイント: POST https://cloud-api.prevu3d.com/oauth/token

ヘッダー:

  • Authorization: Basic <base64(client_id:client_secret)> — Client IDとSecretをclient_id:client_secretとしてエンコードし、その文字列をBase64エンコードします
  • Content-Type: application/x-www-form-urlencoded

ボディ: grant_type=client_credentials

リクエスト例:

POST https://cloud-api.prevu3d.com/oauth/token HTTP/1.1
Host: cloud-api.prevu3d.com
Authorization: Basic eW91ci1jbGllbnQtaWQ6eW91ci1jbGllbnQtc2VjcmV0
Content-Type: application/x-www-form-urlencoded
grant_type=client_credentials

レスポンス例:

{
"hasError": false,
"expiresIn": 3600,
"accessToken": "eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9..."
}

レスポンスのaccessTokenを保存します。トークンは1時間有効です。その後は同じ方法で新しいトークンをリクエストする必要があります。

ステップ4:APIベースURLを取得する

Section titled “ステップ4:APIベースURLを取得する”

リージョンRealityConnect API(組織は1つのリージョンを使用します。このガイドでは正確なURLの確認方法を説明します):

組織のapiUrlを取得するには、以下の検出エンドポイントを呼び出してください。リージョンURLをハードコードしないでください。

エンドポイント: GET https://cloud-api.prevu3d.com/oauth/api-info

ヘッダー: Authorization: Bearer <your_access_token>

レスポンス例:

{
"user": { "..." : "..." },
"organization": {
"id": "217ebd23-ec54-4af0-a6d6-4a441a6d1966",
"name": "Test Organization"
},
"scopes": ["read:basic", "read:hierarchy"],
"apiUrl": "https://api-ue1.prevu3d.com/realityconnect-api"
}

apiUrlの値をすべてのAPI呼び出しのベースとして使用します。organization.idもメモしておいてください。多くのエンドポイントで必要になります。

ステップ5:最初のAPI呼び出しを行う

Section titled “ステップ5:最初のAPI呼び出しを行う”

必要なものはすべて揃いました。アクセストークンとベースURLです。組織のディビジョンを取得する簡単なリクエストを行いましょう:

GET {apiUrl}/v1/nodes/{organization_id}/browse
Authorization: Bearer <your_access_token>

実際の値を使用した例:

GET https://api-ue1.prevu3d.com/realityconnect-api/v1/nodes/217ebd23-ec54-4af0-a6d6-4a441a6d1966/browse HTTP/1.1
Authorization: Bearer eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9...

ディビジョンのリストを含む成功レスポンスは、統合が正しく機能していることを確認します。

上記のすべてを実行する完全なスクリプトです。client_idclient_secretを認証情報に置き換えて実行してください。

import requests
import base64
import json
client_id = "your-client-id"
client_secret = "your-client-secret"
base_url = "https://cloud-api.prevu3d.com"
# ステップ1:トークンを取得
token_response = requests.post(
f"{base_url}/oauth/token",
data={"grant_type": "client_credentials"},
headers={
"Authorization": f'Basic {base64.b64encode(f"{client_id}:{client_secret}".encode()).decode()}',
"Content-Type": "application/x-www-form-urlencoded",
},
)
token_response.raise_for_status()
access_token = token_response.json()["accessToken"]
# ステップ2:API URLと組織IDを取得
api_info = requests.get(
f"{base_url}/oauth/api-info",
headers={"Authorization": f"Bearer {access_token}"},
).json()
api_url = api_info["apiUrl"]
organization_id = api_info["organization"]["id"]
# ステップ3:ディビジョンを参照
divisions = requests.get(
f"{api_url}/v1/nodes/{organization_id}/browse",
headers={"Authorization": f"Bearer {access_token}"},
).json()
print("Divisions:", json.dumps(divisions, indent=2))
表示される内容試すこと
トークン取得時の401 UnauthorizedClient IDとSecretを再確認してください。client_id:client_secretを正しくBase64エンコードしていることを確認してください。
API呼び出し時の403 Forbiddenリクエストは3つのセキュリティレイヤーすべてを通過する必要があります。(1) OAuthアプリケーションに正しいスコープがあること、(2) サービスユーザーがターゲットノードへのコンテンツアクセスを持っていること、(3) そのノードに必要な権限を持つロールがあることを確認してください。

接続、DNS、API URLの問題については、セットアップ — API URLとネットワークアクセスを参照してください。

  • 本番利用では、トークンの有効期限(1時間)が切れる前に更新するロジックを追加してください。
  • 利用可能なすべての操作を確認するには、APIリファレンスを参照してください。