概要
SCIMプロトコルは、SCIMスキーマを通じて指定されたアイデンティティデータのプロビジョニングと管理のためのHTTPベースのプロトコルです。 SCIMサービスプロバイダとしてCasdoorを使用できます。
SCIM サービスプロバイダとしてのCasdoorの使用
現在CasdoorはUser Resource Schemaのみをサポートしており、SCIMユーザー操作を通じてユーザーを管理できます。 以下のエンドポイントを通じてCasdoorとやり取りできます:
| エンドポイント | メソッド | 説明 | 
|---|---|---|
| /scim/ServiceProviderConfig | GET | サポートされているSCIM標準の機能についての詳細を提供します。例えば、サポートされているリソースなど。 | 
| /scim/Schemas | GET | サービスプロバイダスキーマについての詳細を提供します。 | 
| /scim/ResourceTypes | GET | 各リソースについてのメタデータを指定します。 | 
| /scim/Users/:id | GET | リソース識別子 idを持つユーザーを取得します。 | 
| /scim/Users | GET | クエリパラメータを使用してユーザーを検索します(現在は startIndexとcountのみをサポートしています)。 | 
| /scim/Users | POST | ユーザーを作成します。 | 
| /scim/Users/:id | PUT | リソース識別子 idを持つユーザーを更新します。 | 
| /scim/Users/:id | PATCH | PATCH操作によりリソース識別子 idを持つユーザーを変更します。 | 
| /scim/Users/:id | DEL | リソース識別子 idを持つユーザーを削除します。 | 
詳細については、rfc7644を参照してください。
ユーザーリソース
CasdoorはUser Resource Schema(SCIM)とUser(Casdoor)の間のマッピングを実装しています。 属性間のマッピング関係は以下の通りです:
| ユーザーリソーススキーマ(SCIM) | ユーザー(Casdoor) | 
|---|---|
| id | Id | 
| meta.created | CreatedTime | 
| meta.lastModified | UpdatedTime | 
| meta.version | UpdatedTime | 
| externalId | ExternalId | 
| userName | Name | 
| password | Password | 
| displayName | DisplayName | 
| profileUrl | Homepage | 
| userType | Type | 
| name.givenName | FirstName | 
| name.familyName | LastName | 
| emails[0].value | |
| phoneNumbers[0].value | Phone | 
| photos[0].value | Avatar | 
| addresses[0].locality | Location | 
| addresses[0].region | Region | 
| addresses[0].country | CountryCode | 
Casdoorは組織を使用してユーザーを管理しており、各ユーザーは特定の組織に属しているため、organization属性はEnterprise User Schema Extension(スキーマURI urn:ietf:params:scim:schemas:extension:enterprise:2.0:Userによって識別される)で渡す必要があります。 こちらはJSON形式のユーザーリソーススキーマSCIM表現です:
{
    "active": true,
    "addresses": [
        {
            "country": "CN",
            "locality": "Shanghai",
            "region": "CN"
        }
    ],
    "displayName": "Bob~",
    "emails": [
        {
            "value": "test1@casdoor.com"
        }
    ],
    "externalId": "1234123543234234",
    "id": "ceacbcb6-40d0-48f1-af23-0990232d570a",
    "meta": {
        "resourceType": "User",
        "created": "2023-10-08T23:51:55+08:00",
        "lastModified": "2023-10-12T20:38:49+08:00",
        "location": "Users/ceacbcb6-40d0-48f1-af23-0990232d570a",
        "version": "2023-10-12T20:38:49+08:00"
    },
    "name": {
        "familyName": "bob",
        "formatted": "alice bob",
        "givenName": "alice"
    },
    "nickName": "Bob~",
    "phoneNumbers": [
        {
            "value": "18700006475"
        }
    ],
    "photos": [
        {
            "value": "https://cdn.casbin.org/img/casbin.svg"
        }
    ],
    "profileUrl": "https://test.com/profile/built-in/scim_test_user2",
    "schemas": [
        "urn:ietf:params:scim:schemas:core:2.0:User",
        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    ],
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": { // The enterprise User extension is identified using this schema URI
        "organization": "built-in" // This attribute MUST be passed
    },
    "userName": "scim_test_user2",
    "userType": "normal-user"
}