Skip to content

RFC 7643 - System for Cross-domain Identity Management: Core Schema

概要

RFC 7643 は、SCIM(System for Cross-domain Identity Management)のコアスキーマを定義する仕様である。2015年9月に IETF によって標準化された。

SCIM は、クラウドサービス間でユーザーやグループなどのアイデンティティ情報を効率的にプロビジョニング・管理するためのプロトコル群である。RFC 7643 はそのデータモデル(スキーマ)を定義し、RFC 7644 がプロトコル(HTTP API)を定義する。

RFC 7643 は、サービスプロバイダが共通のフォーマットでアイデンティティ情報を表現・交換できるよう、JSON ベースのスキーマとリソースモデルを標準化する。

解決する課題

アイデンティティ情報の異種スキーマ問題

クラウドサービスが普及する以前から、企業内では LDAP や Active Directory を使ってユーザー管理を行ってきた。しかし、SaaS アプリケーションが増加するにつれ、それぞれのサービスが独自のユーザーモデルを持ち、プロビジョニング方法もバラバラになるという問題が生じた。

  • サービスごとに異なる属性名・データ形式
  • ユーザー作成・更新・削除の自動化が困難
  • サービスをまたいだアイデンティティ管理の一元化が不可能

手動管理によるリスク

アイデンティティ情報の管理が手動に頼ると、以下のリスクが高まる:

  • 退職者アカウントの削除漏れ(オーバープロビジョニング)
  • サービス間でのユーザー情報の不整合
  • 管理コストの増大

SCIM はこれらの問題を解決するため、アイデンティティ情報の標準スキーマと REST ベースの操作プロトコルを提供する。

主要概念・用語

用語説明
リソース(Resource)SCIM で管理されるオブジェクト。User や Group が代表的なリソースタイプ
スキーマ(Schema)リソースの属性セットを定義する構造体。URN で識別される
属性(Attribute)リソースの各フィールド。名前、データ型、制約(必須・一意性・変更可能性など)を持つ
多値属性複数の値を持てる属性(emails、phoneNumbers など)。各値は副属性(type、value 等)を持つ
スキーマ拡張標準スキーマに独自属性を追加するための仕組み。URN で識別される拡張スキーマとして定義する
サービスプロバイダSCIM サーバーを実装し、リソースを管理する側(SaaS アプリ等)
プロビジョニングアイデンティティ情報の作成・更新・削除を自動的に行うこと

リソースタイプとスキーマ

SCIM ではリソースタイプごとにスキーマ URI が割り当てられる。コアで定義されるリソースタイプは UserGroup の 2 種類である。

共通属性(すべてのリソースに適用)

すべての SCIM リソースが持つ共通属性を以下に示す。

属性説明
idstringサービスプロバイダが付与する一意識別子。読み取り専用
externalIdstringクライアント(プロビジョニングシステム等)が付与する識別子。サービスプロバイダは不透明な文字列として扱う
meta複合型リソースのメタデータ(作成日時・更新日時・バージョン等)

schemas 属性には、そのリソースが準拠するスキーマ URI の配列が含まれる。

json
{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
  ],
  "id": "2819c223-7f76-453a-919d-413861904646",
  "externalId": "bjensen",
  "meta": {
    "resourceType": "User",
    "created": "2010-01-23T04:56:22Z",
    "lastModified": "2011-05-13T04:42:34Z",
    "version": "W/\"3694e05e9dff591\"",
    "location": "https://example.com/v2/Users/2819c223-7f76-453a-919d-413861904646"
  }
}

User リソース

スキーマ URI: urn:ietf:params:scim:schemas:core:2.0:User

User リソースは個人ユーザーを表す。主要な単数属性と多値属性を以下に示す。

単数属性:

属性必須説明
userNamestring必須サービスプロバイダにおける一意のユーザー識別子
name複合型任意ユーザー名(familyName、givenName 等の副属性)
displayNamestring任意表示用ユーザー名
nickNamestring任意ニックネーム
profileUrlstring任意プロフィール URL
titlestring任意職位・役職
userTypestring任意ユーザー種別(Employee、Contractor 等)
preferredLanguagestring任意優先言語(BCP 47 準拠)
localestring任意ロケール
timezonestring任意タイムゾーン(IANA Time Zone database 準拠)
activeboolean任意アカウントの有効/無効状態
passwordstring任意パスワード。writeOnly(レスポンスに含まれない)

多値属性:

属性説明
emailsメールアドレス(type: work/home/other)
phoneNumbers電話番号
imsインスタントメッセージングアドレス
photosプロフィール写真 URL
addresses物理的な住所(複合型)
groups所属グループ(読み取り専用)
entitlementsエンタイトルメント(権限・ライセンス等)
rolesロール
x509CertificatesX.509 証明書

User リソースの例:

json
{
  "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"],
  "id": "2819c223-7f76-453a-919d-413861904646",
  "userName": "bjensen@example.com",
  "name": {
    "formatted": "Ms. Barbara J Jensen III",
    "familyName": "Jensen",
    "givenName": "Barbara",
    "middleName": "Jane",
    "honorificPrefix": "Ms.",
    "honorificSuffix": "III"
  },
  "displayName": "Babs Jensen",
  "emails": [
    {
      "value": "bjensen@example.com",
      "type": "work",
      "primary": true
    },
    {
      "value": "babs@jensen.org",
      "type": "home"
    }
  ],
  "active": true
}

Group リソース

スキーマ URI: urn:ietf:params:scim:schemas:core:2.0:Group

Group リソースはユーザーのグループを表し、ロールベースやグループベースのアクセス制御モデルを実現する。

属性必須説明
displayNamestring必須グループの表示名
members配列任意グループメンバー(複合多値属性)

members の各要素は以下の副属性を持つ:

副属性説明
valueメンバーの SCIM リソース ID
$refメンバーリソースへの URI(User または Group)
typeリソース種別("User" または "Group")
display表示用の名前

属性の特性

SCIM の各属性はメタデータによってその振る舞いが定義される。

データ型

説明
stringUnicode 文字列
booleantrue または false
decimal小数点を含む実数
integer整数
dateTimeISO 8601 形式の日時
referenceURI 参照
complex副属性を持つ複合型
binaryBase64エンコードされたバイナリデータ(URLセーフ版も可)

Mutability(変更可能性)

説明
readOnlyクライアントによる変更不可。idmeta
readWriteデフォルト値。いつでも読み書き可能
immutable作成時のみ設定可能。作成後の変更は禁止(変更リクエストは 400 エラー)
writeOnly書き込みのみ可能。password など。レスポンスには含まれない

Returned(返却タイミング)

説明
always常にレスポンスに含まれる
neverレスポンスに含まれない
defaultデフォルトで含まれるが、attributes パラメータで除外可能
requestリクエストで attributes パラメータに明示的に指定された場合のみ返却される

Uniqueness(一意性)

説明
noneデフォルト。一意性の制約なし
serverサービスプロバイダ内で一意
globalグローバルに一意(URI など)

多値属性の詳細

多値属性は JSON 配列として表現される。各要素は以下の標準副属性を持つことができる:

副属性説明
type属性の用途を示すラベル("work"、"home"、"other" 等)
primary優先値を示すブール値。配列内で最大1つの要素のみ true にできる
display表示用の人間可読名称(変更不可)
value属性の主要な値
$ref参照先リソースの URI

スキーマ拡張

SCIM では標準スキーマに独自属性を追加するためのスキーマ拡張機能が提供される。RFC 7643 では Enterprise User 拡張スキーマが定義されている。

Enterprise User 拡張スキーマ

スキーマ URI: urn:ietf:params:scim:schemas:extension:enterprise:2.0:User

企業環境で一般的に必要とされる追加属性を定義する。

属性説明
employeeNumberstring社員番号
costCenterstringコストセンター
organizationstring組織名
divisionstring部門
departmentstring部署
manager複合型マネージャー情報(value、$ref、displayName)

拡張スキーマは JSON の最上位オブジェクトに拡張スキーマ URI をキーとしてネストされる:

json
{
  "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
  ],
  "userName": "bjensen@example.com",
  "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "employeeNumber": "701984",
    "costCenter": "4130",
    "organization": "Universal Studios",
    "division": "Theme Park",
    "department": "Tour Operations",
    "manager": {
      "value": "26118915-6090-4610-87e4-49d8ca9f808d",
      "$ref": "../Users/26118915-6090-4610-87e4-49d8ca9f808d",
      "displayName": "John Smith"
    }
  }
}

カスタム拡張スキーマ

サービスプロバイダは独自のスキーマ拡張を定義できる。スキーマ URI は一般に以下の形式を用いる:

urn:ietf:params:scim:schemas:extension:<組織名>:<バージョン>:<リソースタイプ>

Schema エンドポイント

SCIM サービスプロバイダは /Schemas エンドポイントを提供し、サポートするスキーマの定義を公開する。クライアントはこのエンドポイントを参照することで、サービスプロバイダがサポートする属性の一覧と詳細を動的に取得できる。

スキーマレスポンスの例(一部省略):

json
{
  "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"],
  "totalResults": 3,
  "Resources": [
    {
      "id": "urn:ietf:params:scim:schemas:core:2.0:User",
      "name": "User",
      "description": "User Account",
      "attributes": [
        {
          "name": "userName",
          "type": "string",
          "multiValued": false,
          "required": true,
          "caseExact": false,
          "mutability": "readWrite",
          "returned": "default",
          "uniqueness": "server"
        }
      ]
    }
  ]
}

セキュリティに関する考慮事項

認証・認可

SCIM エンドポイントはアイデンティティ情報を扱うため、必ずアクセス制御を実装しなければならない。RFC 7643 では認証・認可の実装を推奨しており、OAuth 2.0 Bearer トークン(RFC 6750)が一般的に使用される。

センシティブ属性の保護

password 属性は writeOnly かつ returned: never として定義されており、レスポンスには含まれない。サービスプロバイダはパスワードをハッシュ化して保管し、平文での保存・返却を行ってはならない。

TLS の必須化

アイデンティティ情報の転送には TLS による暗号化が必須である。特にパスワードを別システムに転送する場合、RFC 7643 は TLS 等のセキュアな接続を使用することを MUST 要件として定めている。

一意性の保証

id 属性はサービスプロバイダ内で一意かつ変更不可でなければならない。リソースの削除後も同じ id を再利用してはならない。

情報漏洩への配慮

SCIM レスポンスには大量のユーザー情報が含まれる可能性がある。サービスプロバイダは、リクエストしたクライアントに開示してよい情報のみを返却するよう適切なアクセス制御を実装すること。

関連仕様

仕様関係
RFC 7644SCIM プロトコル。RFC 7643 のスキーマを使った HTTP API を定義
RFC 7642SCIM の概念・概要・要件
RFC 6749OAuth 2.0。SCIM API の認可に使用
RFC 6750Bearer トークン。SCIM API へのアクセスに使用

参考文献