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 Service
和 Downstream Application
。正如我所说,这些不是 RFC 的一部分,但有助于理解。
Directory Service
有责任保存用户的身份和个人信息。由于此信息的性质,它们通常也是身份提供者(Okta、AAD),但不一定。
设置 Directory Service
和 Downstream Application
(使用 SCIM)之间的集成时,用户信息的正常流动是单向。
这很重要。
事物在Directory Service
中管理用户。这可以是任何 CRUD 操作,一旦在它自己的数据库(关于用户的真实来源)中完成,将进行基于 SCIM 网络的调用以在 downstream application
中配置、编辑或删除用户.
SCIM 协议没有定义需要发出的具体请求。例如,要在下游应用程序中创建一个新用户,身份服务必须首先检查该用户是否已经存在并采取适当的行动。这样的事情将是一个明智的实施:
- 从应用程序
请求用户xyz@domain.com
- 如果用户不存在,请请求创建。
- 如果用户存在,检查返回信息是否与本地保存的信息不同;如果存在差异,请在应用程序中更新用户。
根据您的应用程序,您可能根本不允许任何用户管理,而用户只是由 SCIM 协议专门管理。这完全没问题。
但是,如果您这样做,它会变得更加复杂;
- 您的应用程序中已有用户,并且
- 允许编辑您的应用程序中的信息
如果是上述任何一种情况,那么您必须特别努力阻止用户或管理员更改 SCIM 负责的字段。应用程序不会自动触发以告知目录服务已发生更改。
虽然像 Okta 这样的服务允许从下游应用程序批量导入回自身,但这是一个选择的实现,并不是 SCIM 在这种情况下的真正目的。
总而言之:Directory Services
是您的用户信息的权威来源。您将 从 此服务获取用户数据,并且 不会 通过 SCIM 向其提供数据,或者成为从您的应用程序创建用户的触发器。
希望能稍微解释一下。
我是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 Service
和 Downstream Application
。正如我所说,这些不是 RFC 的一部分,但有助于理解。
Directory Service
有责任保存用户的身份和个人信息。由于此信息的性质,它们通常也是身份提供者(Okta、AAD),但不一定。
设置 Directory Service
和 Downstream Application
(使用 SCIM)之间的集成时,用户信息的正常流动是单向。
这很重要。
事物在Directory Service
中管理用户。这可以是任何 CRUD 操作,一旦在它自己的数据库(关于用户的真实来源)中完成,将进行基于 SCIM 网络的调用以在 downstream application
中配置、编辑或删除用户.
SCIM 协议没有定义需要发出的具体请求。例如,要在下游应用程序中创建一个新用户,身份服务必须首先检查该用户是否已经存在并采取适当的行动。这样的事情将是一个明智的实施:
- 从应用程序 请求用户xyz@domain.com
- 如果用户不存在,请请求创建。
- 如果用户存在,检查返回信息是否与本地保存的信息不同;如果存在差异,请在应用程序中更新用户。
根据您的应用程序,您可能根本不允许任何用户管理,而用户只是由 SCIM 协议专门管理。这完全没问题。 但是,如果您这样做,它会变得更加复杂;
- 您的应用程序中已有用户,并且
- 允许编辑您的应用程序中的信息
如果是上述任何一种情况,那么您必须特别努力阻止用户或管理员更改 SCIM 负责的字段。应用程序不会自动触发以告知目录服务已发生更改。
虽然像 Okta 这样的服务允许从下游应用程序批量导入回自身,但这是一个选择的实现,并不是 SCIM 在这种情况下的真正目的。
总而言之:Directory Services
是您的用户信息的权威来源。您将 从 此服务获取用户数据,并且 不会 通过 SCIM 向其提供数据,或者成为从您的应用程序创建用户的触发器。
希望能稍微解释一下。