SCIM 2.0
SCIM 2.0 ユーザープロビジョニング
Authrimは、自動化されたユーザーおよびグループプロビジョニングのためにSCIM 2.0(System for Cross-domain Identity Management)をサポートしています。
概要
サポートされる機能
- ユーザーCRUD操作(作成、読み取り、更新、削除)
- グループCRUD操作
- SCIMクエリ構文によるフィルタリング
startIndexとcountによるページネーション- ETagによるリソースバージョニング
- PATCH操作による部分更新
- Enterprise User拡張
- Bearerトークン認証
認証
すべてのSCIMリクエストにはBearerトークンが必要です:
Authorization: Bearer YOUR_SCIM_TOKENSCIMトークンの作成
- Admin UI > SCIMトークンに移動
- トークン作成をクリック
- 説明を入力(例:「Okta SCIM統合」)
- 有効期限を設定(例:365日)
- トークンをすぐにコピー(再表示されません)
APIリファレンス
ユーザー
ユーザー一覧取得
GET /scim/v2/Usersクエリパラメータ:
| パラメータ | 型 | 説明 | 例 |
|---|---|---|---|
filter | string | SCIMフィルター式 | userName eq "[email protected]" |
sortBy | string | ソート属性 | userName |
sortOrder | string | ascendingまたはdescending | ascending |
startIndex | integer | 1ベースのページネーションインデックス | 1 |
count | integer | 結果数(最大1000) | 100 |
レスポンス:
{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"], "totalResults": 250, "startIndex": 1, "itemsPerPage": 100, "Resources": [ { "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "id": "user-123", "name": { "givenName": "John", "familyName": "Doe" }, "active": true, "meta": { "resourceType": "User", "created": "2024-01-01T00:00:00Z", "lastModified": "2024-01-02T00:00:00Z", "location": "https://auth.example.com/scim/v2/Users/user-123", "version": "W/\"1704153600000\"" } } ]}ユーザー作成
POST /scim/v2/UsersContent-Type: application/json
{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "name": { "givenName": "John", "familyName": "Doe" }, "active": true}ユーザー更新(PATCH)
PATCH /scim/v2/Users/{id}Content-Type: application/json
{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [ {"op": "replace", "path": "name.givenName", "value": "Jane"}, {"op": "replace", "path": "active", "value": false} ]}サポートされる操作:
add- 新しい属性を追加replace- 既存の属性を置換remove- 属性を削除
ユーザー削除
DELETE /scim/v2/Users/{id}グループ
グループ一覧取得
GET /scim/v2/Groupsグループ作成
POST /scim/v2/GroupsContent-Type: application/json
{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], "displayName": "Engineering", "members": [ {"value": "user-123", "type": "User"} ]}フィルタリング
SCIMは標準化されたクエリ構文を使用した複雑なフィルタリングをサポートしています。
フィルター演算子
| 演算子 | 説明 | 例 |
|---|---|---|
eq | 等しい | userName eq "[email protected]" |
ne | 等しくない | active ne false |
co | 含む | userName co "john" |
sw | で始まる | userName sw "john" |
ew | で終わる | userName ew "example.com" |
pr | 存在する | phoneNumber pr |
gt | より大きい | meta.created gt "2024-01-01" |
lt | より小さい | meta.created lt "2024-12-31" |
論理演算子
| 演算子 | 説明 | 例 |
|---|---|---|
and | 論理AND | userName eq "john" and active eq true |
or | 論理OR | userName eq "john" or userName eq "jane" |
not | 論理NOT | not (active eq false) |
例
# メールでユーザーを検索
# アクティブなユーザーを検索GET /scim/v2/Users?filter=active eq true
# 複合フィルターGET /scim/v2/Users?filter=(userName co "john" or userName co "jane") and active eq trueページネーション
SCIMはstartIndexとcountパラメータで1ベースのページネーションを使用します。
# 最初のページ(アイテム1-100)GET /scim/v2/Users?startIndex=1&count=100
# 2番目のページ(アイテム101-200)GET /scim/v2/Users?startIndex=101&count=100リソースバージョニング(ETag)
SCIMは楽観的同時実行制御のためにETagをサポートしています:
# ETag付きでユーザーを取得GET /scim/v2/Users/user-123Response: ETag: W/"1704153600000"
# ETag付きで更新PUT /scim/v2/Users/user-123If-Match: W/"1704153600000"エラーレスポンス
{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"], "status": "400", "scimType": "invalidValue", "detail": "userNameは必須です"}| scimType | HTTPステータス | 説明 |
|---|---|---|
invalidFilter | 400 | 無効なフィルター構文 |
invalidValue | 400 | 無効な属性値 |
uniqueness | 409 | リソースが既に存在 |
mutability | 400 | 読み取り専用属性の変更試行 |
noTarget | 404 | リソースが見つからない |
invalidVers | 412 | ETag不一致 |
統合ガイド
- Authrim Admin UIでSCIMトークンを生成
- Oktaアプリを設定:
- SCIM Base URL:
https://YOUR_DOMAIN/scim/v2 - 認証: HTTPヘッダー
- Authorization: Bearer
YOUR_TOKEN
- SCIM Base URL:
- プロビジョニングを有効化:
- ユーザー作成
- ユーザー属性更新
- ユーザー無効化
- エンタープライズアプリケーションを追加(非ギャラリー)
- プロビジョニングを設定:
- プロビジョニングモード: 自動
- テナントURL:
https://YOUR_DOMAIN/scim/v2 - シークレットトークン:
YOUR_TOKEN
- 接続をテストして属性マッピングを設定
- Applications > Add App > SCIM Provisioner
- 設定:
- SCIM Base URL:
https://YOUR_DOMAIN/scim/v2 - SCIM Bearer Token:
YOUR_TOKEN - API Connection: SCIM 2.0
- SCIM Base URL:
属性マッピング
ユーザー属性
| SCIM属性 | Authrimフィールド | 型 |
|---|---|---|
id | id | string(読み取り専用) |
userName | preferred_username | string(必須) |
name.givenName | given_name | string |
name.familyName | family_name | string |
emails[primary].value | email | string(必須) |
phoneNumbers[primary].value | phone_number | string |
active | active | boolean |
locale | locale | string |
timezone | zoneinfo | string |
ベストプラクティス
セキュリティ
- トークンを定期的にローテーション(例:90日ごと)
- 統合ごとに別々のトークンを使用
- 監査ログでトークン使用状況を監視
- すべてのSCIMリクエストにHTTPSを使用
パフォーマンス
- フィルタリングを使用してレスポンスサイズを削減
- 大きなデータセットにページネーションを実装
- 不要な更新を避けるためにETagを使用
エラー処理
- 指数バックオフでリトライロジックを実装
- 429(レート制限)レスポンスを処理
- トラブルシューティングのためにすべてのエラーをログ
レート制限
- トークンごとに1分あたり100リクエスト
- 超過時に
429 Too Many Requestsレスポンス Retry-Afterヘッダーが待機時間を示す