SCIM 与我的服务提供商集成后如何创建新资源?

How do I create new resource once SCIM is integrated with my service provider?

我是SCIM新手

在 SCIM 工作流程中,我只是好奇如何在服务提供商端创建新用户。 如果我在服务提供商端将新用户创建为本地用户 table,然后发送 SCIM post 用户请求。此请求可能由于多种原因而失败,例如:网络断开、服务关闭、数据验证失败等

所以我打算在服务提供商端使用 SCIM api 来创建新用户。工作流程如下所示 Desgin#1.

Desgin#2我认为这是不正确的,因为我发现在这个设计中会出现一些问题,比如竞争条件。

我的观念正确吗?

  (1) Design#1: I intend to use this. All user operations are performed by IdP side.
                I can avoid some problem like race condition.
      ┌───────────────────┐              ┌───────────────────────┐
      │                   │              │                       │
      │   SCIM IdP Side   │              │ Service Provider Side │
      │                   │              │                       │
      │ (ex: Okta, Azure )│              │ (ex: my website)      │
      │                   │              │                       │
      │  [IdP]            │              │  [SP]                 │
      │                   │              │                       │
      └────────┬──────────┘              └────────────┬──────────┘
               │                                      │
               │                                      │
               │                                      │
               │◄─────────────────────────────────────┤
               │  (1) POST USER Through SCIM Protocol │
               │                                      │
               │                                      │
               │                                      │
               │                                      │
               │                                      │
               ├─────────────────────────────────────►│
               │  (2) IdP created successfully,       │
               │      got by SP and the create        │
               │      user entry in SP's database     │
               │                                      │
               │      Also notify other SP by SCIM    │
               │      protocol(new user created)      │
               ▼                                      ▼



  (2) Design#2: I think this will cause race conditon, once we have lots of SP resouce creating

     ┌───────────────────┐              ┌───────────────────────┐
     │                   │              │                       │
     │   SCIM IdP Side   │              │ Service Provider Side │
     │                   │              │                       │
     │ (ex: Okta, Azure )│              │ (ex: my website)      │
     │                   │              │                       │
     │  [IDP]            │              │  [SP]                 │
     │                   │              │                       │
     └────────┬──────────┘              └────────────┬──────────┘
              │                                      │
              │                                      ├────────┐
              │                                      │        │ (1) SP create new user in
              │                                      │        │     local Database
              │                                      │        │
              │                                      │        │
              │                                      │        │
              │                                      │        │
              │◄─────────────────────────────────────┤◄───────┘
              │  (2) After user is created locally,  │
              │      POST USER Through SCIM Protocol │
              │      to remote IdP Side.             │
              │                                      │
              │                                      │
              ├─────────────────────────────────────►│
              │  (3) Also notify other SP by SCIM    │
              │      protocol(new user created)      │
              ▼                                      ▼

您似乎熟悉 SAML 术语并将其与 SCIM 混为一谈。公平地说,它们与一些共享的措辞有关,但如果不阅读 RFC 以确保 100% 准确,可以换句话说,这可能有助于理顺它。

我认为一个简单的 1:1 SCIM 关系是 Directory ServiceDownstream Application。正如我所说,这些不是 RFC 的一部分,但有助于理解。

Directory Service 有责任保存用户的身份和个人信息。由于此信息的性质,它们通常也是身份提供者(Okta、AAD),但不一定。

设置 Directory ServiceDownstream Application(使用 SCIM)之间的集成时,用户信息的正常流动是单向

这很重要。

事物在Directory Service中管理用户。这可以是任何 CRUD 操作,一旦在它自己的数据库(关于用户的真实来源)中完成,将进行基于 SCIM 网络的调用以在 downstream application 中配置、编辑或删除用户.

SCIM 协议没有定义需要发出的具体请求。例如,要在下游应用程序中创建一个新用户,身份服务必须首先检查该用户是否已经存在并采取适当的行动。这样的事情将是一个明智的实施:

  1. 从应用程序
  2. 请求用户xyz@domain.com
  3. 如果用户不存在,请请求创建。
  4. 如果用户存在,检查返回信息是否与本地保存的信息不同;如果存在差异,请在应用程序中更新用户。

根据您的应用程序,您可能根本不允许任何用户管理,而用户只是由 SCIM 协议专门管理。这完全没问题。 但是,如果您这样做,它会变得更加复杂;

  1. 您的应用程序中已有用户,并且
  2. 允许编辑您的应用程序中的信息

如果是上述任何一种情况,那么您必须特别努力阻止用户或管理员更改 SCIM 负责的字段。应用程序不会自动触发以告知目录服务已发生更改。

虽然像 Okta 这样的服务允许从下游应用程序批量导入回自身,但这是一个选择的实现,并不是 SCIM 在这种情况下的真正目的。

总而言之:Directory Services 是您的用户信息的权威来源。您将 此服务获取用户数据,并且 不会 通过 SCIM 向其提供数据,或者成为从您的应用程序创建用户的触发器。

希望能稍微解释一下。