博客 | 见解 2022 年 6 月 7 日

欢迎来到公海710 SCIM 101

SCIM 101

SCIM(跨域身份管理系统)是一组标准化的基于 HTTP 的协议和架构,用于在不同的服务提供商之间配置、管理和取消配置用户。

换句话说,SCIM 旨在让许多第三方服务能够共享个人资料详细信息,从而实现功能更丰富的 SSO 体验。现代身份验证的概念使用户能够登录到单个身份提供商 (IdP),然后利用多个服务提供商 (SP)。对于像 Alchemy 这样的组织,用户是在人力资源管理系统 (HRMS) 中创建的,并通过 SCIM 配置到 Okta 租户中。然后,通过 SCIM 将这些用户推送到 Office 365 租户以及许多其他第三方 SP。当用户在 HRMS、Okta、O365 或其他 SCIM 支持的应用程序中更新其个人资料时,数据将通过 SCIM 在 SP 和 Okta 之间同步,然后由 Okta 使用其生命周期管理 (LCM) 解决方案推送到其他 SP。

想想组织中用户的典型生命周期:他们申请、面试,然后被雇用到组织(加入者),然后升职、调岗或在组织内调动(移动者),最后退休或辞职,离开组织(离开者)。这种加入者-移动者-离开者模型代表了对用户能力和个人信息的一系列权利、更新和更改。 SCIM 是让所有服务提供商保持同步的粘合剂,在服务提供商之间自动复制用户配置文件的相关元素,从而为个人提供业务价值,而无需手动创建、更新或停用帐户。

SCIM 幕后花絮

SCIM 只不过是一组 HTTP 端点的规范,这些端点利用带有 JSON 负载的 RESTful Web 服务。这些端点(通常)特定于用户和组,在内部系统和外部系统(服务提供商、[SP])之间交换数据。由于这些端点必须可供更大的互联网使用,因此严重SCIM 解决方案的开发应考虑所包含 API 的安全性。执行此操作的典型过程是使用身份提供商 (IdP) 和现代身份验证型号。在部署 SCIM 解决方案之前,使用最佳实践配置端点的安全性至关重要。如果不这样做,内部组和用户的管理就会暴露在整个互联网上!

SCIM 解决方案和 SP 之间的初始对话从适当命名的 /ServiceProviderConfig 端点开始。这是一个 GET 请求,告诉 SP SCIM 服务器将支持哪些功能。这可以在每个 SP 的基础上进行修改,特别是如果使用身份验证控制唯一地标识每个服务提供商的话。该端点与 /Schemas 和 /ResourceTypes 端点一起允许自我发现和规范特定 SCIM 实现的功能。模式被定义为核心用户模式(RFC 7643) 和其他自定义架构,由实施的 SCIM 解决方案定义。资源类型标识 SCIM 解决方案将支持的资源,通常是“用户”和“组”之一或两者。

/Users 和 /Groups 端点可以支持多种 HTTP 方法类型来执行各种操作。这些方法的支持取决于 SCIM 解决方案的实现(例如,SCIM 解决方案可能允许读取组,但不允许创建、更新或删除组)。 GET 方法旨在读取一个或多个资源 - 遵循标准语义 HTTP REST格式。 SCIM 支持查询、分页和资源过滤在其规格范围内—全部使用 POST 方法。

DELETE 方法可以删除资源,应谨慎实施。值得注意的是,某些 SCIM 实现倾向于将用户资源的“活动”值更新为“假”,而不是支持删除功能。这最终还是取决于 SCIM 解决方案的实施。

POST、PUT 和 PATCH 方法负责监督用户和组的创建和更新。根据 SCIM 规范,POST 方法用于创建新资源。要更新现有资源,必须使用 PUT 或 PATCH 方法。 PUT 方法要求提供整个资源以及所有更新,而 PATCH 方法旨在执行资源的部分更新。

SCIM 数据模型

SCIM 数据模型,RFC 7643 中定义,概述了定义任何资源时可以提供的核心属性数据类型。 SCIM 规范涵盖以下数据类型:

  • 字符串 - 任何字符集
  • 布尔值 - 真/假值
  • 十进制——十进制数
  • 整数——整数
  • DateTime - ISO 格式的日期和时间戳
  • 二进制——必须采用 Base64 编码的任意二进制数据(例如图像)
  • 引用 - 对另一个数据集或端点的引用
  • 复杂 - 必须由以下部分组成的另一个 JSON 对象简单(非复杂)属性

从 SCIM 服务器返回时,每个资源对象都应包含资源类型、架构(包括任何自定义架构)、通用属性、核心属性和任何扩展属性。通用属性在所有 SCIM 资源中都是通用的(例如“id”),而核心属性是位于资源顶层的属性。对于用户资源,这将包括“userName”属性。需要注意的是,用户的公共属性“姓名”是一个复杂的属性,具有许多子值。

扩展属性仅限于由 SCIM 解决方案呈现时在资源中提供、包含和引用的架构定义的数量。虽然每个组织都可以为自定义属性定义自己的架构,但 SCIM 规范包括企业用户架构名称“urn:ietf:params:scim:schemas:extension:enterprise:2.0:User”下的表示。

构建 SCIM 解决方案

当决定构建 SCIM 解决方案时,了解 SCIM 规范中定义的核心方法和数据模型非常重要。大多数拥有现有数据集的组织将实施 SCIM 解决方案作为其内部系统的软件代理,使用它将结构化数据模型映射到现有数据模型。这使用标准合约将外部和内部数据结构解耦,以便可以将修改应用于内部数据模型,而对外部合约的中断或修改最小或没有中断或修改。

要规划、构建、部署和管理自定义 SCIM 解决方案,请按以下步骤操作:

  1. 确定技术堆栈。这将包括所使用的软件语言、框架和工具。
  2. 确定托管方法。 SCIM 解决方案需要公开。它应该托管在数据中心还是云端?高可用性 (HA) 标准是什么?
  3. 确定 SCIM 内部访问权限。需要访问内部 API、数据模型或其他敏感数据。确定 SCIM 将如何做到这一点以及将采取哪些控制措施来保护数据。
  4. 确定 SCIM 安全模型。是否会利用 Okta 或 Microsoft Azure Active Directory (AAD) 等 IdP 来保护端点?每个客户端都会有自己的凭据,还是会使用共享凭据?
  5. 确定的支持的资源和功能。 SCIM 会支持用户吗?团体?两个都?将支持哪些方法?所有客户都支持这些吗?
  6. 了解 SCIM 数据模型。哪些数据映射到核心用户和组架构?是否需要企业用户架构?这些属性如何映射到内部数据模型?是否需要自定义架构?
  7. 将内部数据模型映射到 SCIM 数据模型。构建映射策略。
  8. 确定所需的审核日志或指标。需要记录哪些日志?这些需要坚持多久?是否需要审计日志?这些应该保留多长时间?
  9. 构建 SCIM 解决方案。实现端点、架构映射、安全性和日志记录/指标。
  10. 测试 SCIM 解决方案。在开发过程中构建自动化测试,以最大限度地减少递归和人为错误。每次代码更改时运行测试,并自动构建以要求每个测试都通过。开发完成后手动确认功能。
  11. 部署 SCIM 解决方案。自动执行 SCIM 解决方案的部署和 HA 配置。如果可能,请确保自动缩放可用于处理高负载事件。
  12. 监控 SCIM 解决方案。监视、控制、维护和检查日志和指标。确保解决方案按预期执行并且部署可以处理负载。

SCIM 是一款强大的工具,可以为任何组织提供令人难以置信的自动化功能;然而,开发未经良好规划、测试和/或保护的 SCIM 解决方案可能会对组织的完整性造成极大的危害和危险。请记住,提前一天的计划可以节省数周或数月的麻烦、调试、返工或修改。

考虑构建 SCIM 解决方案,但担心是否正确?消除整个过程中的恐惧和担忧,今天就与炼金术士交谈。我们非常乐意帮助您了解、规划、构建、部署和管理适合您组织的功能齐全的 SCIM 解决方案。

参考文献

作者

作者头像 贾勒特·巴里尔
分享

更多文章

公司
2026 年 3 月 5 日

欢迎来到公海710 收购 ECS 以扩大在西海岸的边缘、云和安全存在

皮特·唐宁头像 皮特·唐宁
见解
2025 年 12 月 8 日

2026 年 Microsoft 365 定价变化:企业 IT 的决策点

凯尔蒂姆头像 凯尔·蒂姆
见解
2025 年 12 月 8 日

登录时的信任:隐形身份流如何重新定义转换和安全