• 使用 Entra ID 配置 SCIM 预配(Entra ID 以前称为 Azure AD)

    设置单点登录 (SSO) 后,您可以通过 Udemy Business 在 Entra ID( 以前称为 Azure AD)中为 Udemy 配置跨域身份管理 (SCIM 2.0) 预配。这将允许您在 Entra ID 中预配、取消预配、创建群组、管理群组成员和更改用户个人资料详细信息(如姓名和电子邮件地址),这会自动 更新 Udemy Business。您将不再需要使用这些操作分别更新 Entra ID 和 Udemy Business,因为它们都将在 Entra ID 中同步。

    请注意:Entra ID 以前称为 Azure AD。

    要为您的 Udemy Business 帐户启用 SCIM 配置,请先转到您的 Udemy Business 帐户,然后访问管理 > 设置 > 配置 (SCIM)

    单击开始设置,按照说明启用 SCIM 并生成密钥令牌(持有者令牌),然后您需要将其放置在 Entra ID 中。

    请注意:

    • 必须在激活 SCIM 之前启用 SSO
    • 单点登录和预配适用于 Udemy Business Enterprise 方案客户。
    • 通过 Entra ID 预配的用户在首次登录 Udemy Business 应用之前不会获得许可证。
    • SCIM 预配更改只能从 Entra ID 同步到 Udemy Business,反之则不行。
    • 在 Udemy Business 应用中,无法在 Entra ID 中更改由 SCIM 管理的用户和群组,SCIM 是用户和群组数据的唯一真实来源。
    • 如果您有不需要或不想从 Entra ID 推送的用户(如承包商或临时员工),仍然可以在 Udemy Business 中手动创建群组。

    使用 Entra ID 配置 SCIM 预配

    1. 要为您的 Udemy Business 帐户启用 SCIM 配置,请先转到您的 Udemy Business 帐户,然后访问“管理”>“设置”>“配置 (SCIM)”。

    2. 单击开始设置,选择您的身份提供程序,并按照说明生成密钥令牌(持有者令牌),然后您需要将其放置在 Entra ID 中。

    1a.png

    3. 然后访问您的 Entra ID 帐户,转到您的 Udemy Business SSO 应用,并按照以下步骤进行设置。您还可以参考 Microsoft 自己的有关使用 Entra ID 进行 SCIM 预配的配置指南,以获取进一步的指导。

    在您的 Azure 门户中,转到配置

    (请注意:在下面的屏幕截图中,udemyazure 是我们使用的测试名称,用于说明如何配置 SCIM;您应当找到在您自己的实例中进行配置时由您的团队命名的应用)

    1b.png

    4. 选择自动作为配置模式。

    1c.png

    5. 在管理员凭据部分:

    租户 URL 为:https://yourdomain.udemy.com/scim/v2(yourdomain 是您的 Udemy Business 帐户的 URL)

    密钥令牌:这是可以在您的 Udemy Business 帐户中生成或查看的“持有者”令牌。(转到“管理”>“设置”>“用户访问”以获取密钥令牌)。

    6. 点击测试连接以检查是否正常运行。

    可选:如果想要从 Azure 接收有关错误的警报,可以输入电子邮件地址。

    1d.png

    7. 在映射中:

    检查属性映射:

    1e.png

    Azure SCIM Attribute.png

    请确认以下必需的属性已添加到 customerappsso 属性中,因为 SCIM 预配在 Udemy 中运行需要这些字段。

    支持的属性

    SCIM 属性 是否必填? 描述
    emails[type eq "work"].value 用户的电子邮件。必须唯一
    用户名 IdP 的用户名。必须唯一。
    活跃 标记停用/重新激活用户
    外部 ID IdP 用户的外部 ID。必须唯一。

    urn:ietf:params:scim:schemas:extension:

    enterprise:2.0:User:employeeNumber

    从 EnterpriseSchema 返回 employeeNumber 字段并将其存储为 external_id 字段。应与您要发送到 externalId 的属性匹配。
    name.givenName 用户的名字。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    name.familyName 用户的姓氏。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    姓名,{ givenName, familyName } 用户的名字和姓氏。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    title 用户的职称,例如“高级工程师”。

    urn:ietf:params:scim:schemas:extension:

    udemy:2.0:User:licensePoolName

    许可证池名称。

    群组

    用户所属的 SCIM 群组。

    Edit_attribute.jpg

    确认属性 Switch([IsSoftDeleted], , "False", "True", "True", "False") 已映射到 active,以允许停用传递用户。

    mapping_type.jpg

    8. 向下滚动到“用户属性映射”的底部,并启用显示高级选项

    选择编辑 customapsso 的属性列表,并为 iduserName 启用正确大小写

    9. 返回主预配设置屏幕:

    1h.png

     

    10. 选择您想要同步用户和群组的范围

    1i.png

    如果您需要限制某些员工或部门的访问权限,可以仅同步分配了 Udemy Business 应用的用户和群组。或者,如果每个员工都有访问权限,则可以同步所有用户和群组

    1j.png

    为了向更多用户和群组配置 Udemy Business 访问权限,可以执行以下操作:

    11. 单击用户和群组

    users_and_groups.png

    12. 单击添加用户(可用于选择添加用户和群组)

    选择要添加到应用的所有用户或群组,然后单击选择

    Add_assignment.png

    故障排除

    关于映射:

    User_mapping.png

    如果在预配时遇到以下错误

    {"schemas":["urn:ietf:params:scim:api:messages:2.0:Error"],"status":400,"detail":"{'emails': ['This field is required.']}"}

    您应当更改该用户的映射。

    Edit_attribute.png

    emails[type eq "work"].value 需要映射到 userPrincipalName,即,如果 userPrincipalName 是电子邮件所在的位置。

    如果您转到用户个人资料,您应当可以在其中看到包含电子邮件的字段。

    user_profile.png

    对于预配用户时出现的任何错误,您可以通过查看预配日志来查看更多详细信息。

    • 要获取此日志,请在 Azure 上转到 Udemy 应用 > 预配 > 预配日志 > 搜索受影响的用户 > 故障排除和建议。
    • 如果需要,打开支持工单并提供 Azure 预配日志的屏幕截图,以便我们查看失败的原因。

    阅读文章
  • 使用 OneLogin 配置 SCIM 配置

    设置单点登录 (SSO) 后,您可以通过 Udemy Business 在 OneLogin 中配置跨域身份管理系统 (SCIM) 配置。这将允许您在 OneLogin 中配置、取消配置、创建群组、管理群组成员和更改用户个人资料详细信息(如姓名和电子邮件地址),这会自动 更新Udemy Business。您将不再需要使用这些操作分别更新 OneLogin 和 Udemy Business,因为他们都将在 OneLogin 中同步。

    本文概述了如何使用 OneLogin 配置 SCIM 配置。 

    如何启用 SCIM 配置

    要为您的 Udemy Business 帐户启用 SCIM 配置 请先转到您的 Udemy Business 帐户,然后访问管理 > 设置 > 配置 (SCIM)

    点击开始设置,按照说明启用 SCIM 并生成秘密令牌(持有者令牌),然后您需要将其保存在 OneLogin 中。

    1_21.png

    然后访问您的 OneLogin 帐户,转到您的 Udemy Business SSO 应用,并按照以下步骤进行设置。 

    OneLogin 支持中心还提供了有关如何配置用户的其他信息。

    1. 在管理员面板中,点击”应用“选项卡:

    2_21.png

    2. 导航到”配置“选项卡。在“配置”选项卡中,输入您的 Udemy Business 帐户在上述步骤中生成的 SCIM 持有者令牌,并设置为“已启用”:

    3_21.png

    3. 然后导航到“配置”选项卡,并勾选“启用配置”复选框:

    workflow_enable_provisioning.png

    创建规则以将用户的群组与 Udemy Business 同步

    OneLogin 使用“规则”的概念来将用户与您的 Udemy Business 帐户中的特定群组同步。有多种方法可用于根据您对同步群组的不同要求创建规则。以下是有关如何创建规则以将用户与名为“工程师”的群组同步的一个具体示例。

    1. 导航到“规则”选项卡,然后选择“添加规则”。

    rules_.png

    2. 基本要求在进入下一步之前,请联系我们的支持团队,请求他们启用支持从 Udemy Business 中提取 SCIM 群组的功能标记。启用此功能后,您可以从 Udemy Business 中提取现有群组,并在 OneLogin 中访问这些群组。

    3. 在“编辑映射”屏幕中,您可以为规则配置逻辑。在此示例中,我们创建了一个规则 ,其中的逻辑是“如果用户的群组是工程群组,则操作是将 Udemy Business 中用户的群组设置为工程师”:要在 Udemy Business 中“从现有”提取群组,将需要刷新权利。

    actions.png

    4. 导航到“参数”选项卡:

    OneLogin parameters.png

    要将 externalId 值从 OneLogin 发送到 Udemy,请确保添加了参数 urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber。
    注意:由于 OneLogin 每天都会同步参数,因此添加参数可能不会立即生效。

    5. 点击“群组”字段:

    groups_field.png

    6. 勾选“包含在用户配置中”复选框并保存:

    9_21.png

    7. 现在,在 OneLogin 中添加用户,然后将该用户的群组设置为“工程群组”:

    10_21.png

    8. 将用户添加到 Udemy Business 应用并同步后,根据规则,系统会将该用户添加到您的 Udemy Business 帐户中的“工程师”群组:

    11_21.png

     

    阅读文章
  • 使用 SCIM 自动化用户和群组管理

    Udemy Business 通过跨域身份管理系统 (SCIM) 标准来支持自动化用户和群组访问和身份管理。单点登录 (SSO) 服务和身份提供程序使用 SCIM 跨各种应用和工具(包括 Udemy Business)来管理人员。

    SCIM 对于希望最大化规模、安全性和最小化 Udemy Business 用户管理摩擦的组织来说是一个很好的选择。

    可以用 SCIM 做什么:

    • 自动从您的身份提供程序预配许可证以及用户和群组的访问(预配)。
    • 自动从您的身份提供程序停用用户和群组(取消预配)。
    • 重新激活之前取消配置的用户(前提是用户的个人身份信息没有匿名处理)。
    • 更新用户详细信息:姓名、电子邮件地址。 
    • 创建、移除或编辑群组。
    • 管理群组成员关系(用户改变群组)。

    不能用 SCIM 做什么:

    • 通过 SCIM 删除任何身份提供程序上的个人可识别信息 (PII)
    • 将数据从 Udemy Business 同步回身份提供程序。
    • 管理角色(管理员、群组管理员、用户)。
    • 分配 Udemy Business Pro 许可证。
    • 请注意:如果通过 Udemy Business 用户管理门户手动邀请 SCIM 预配的用户,则他们将不会收到自动生成的电子邮件邀请来申领其 Udemy Business 许可证。我们建议您的学习团队发送单独的通信,说明他们可如何通过他们的 SSO 提供程序登录来获得访问权限。 然而,通过 SCIM 重新激活的用户将收到一封来自 Udemy 的自动生成的电子邮件,声称他们的帐户已被重新激活。

    采取以上受支持的操作后,相应数据或更改将自动在 Udemy Business 上更新

    有关您的 Udemy Business 帐户的 SCIM 集成的要点

    • 您的 SCIM 集成设置将各不相同,具体取决于您使用的身份提供程序。 
    • Udemy Business 支持对关键身份提供程序和 SSO 服务进行 SCIM 配置,这些服务提供访问和身份管理。
    • SCIM 配置功能适用于使用单点登录 (SSO) 的 Enterprise 方案客户。
    • 在您的 SSO 服务中通过 SCIM 配置的用户在首次登录 Udemy Business 应用之前不会获得许可证。 如果用户是通过 SCIM 预配的,但尚未首次登录,他们将显示在“所有用户”页面上,状态为无许可证 
      • 对于已经为所有用户购买 Udemy Business Pro 许可证的客户,在用户接受邀请时,或者在用户通过 SSO/SCIM 进行身份验证时,系统将自动为用户分配 Pro 许可证。
      • 注意:当启用 SCIM 时,Udemy 使用 SCIM 协议通过 SAML 进行属性映射。由于组和 lmsUserID 不是 SCIM 用户属性,如果您以前将它们映射为仅 SAML 配置的一部分,则这些属性将不会通过 SAML 传递。由于群组不是 SCIM 用户属性,如果您以前将属性映射为仅 SAML 配置的一部分,则群组将不会通过 SAML 传递。

      SCIM 管理的用户的姓名和电子邮件地址旁边有一个灰色的 SCIM 标志。设置了状态 SCIM 的用户在首次登录之前不会使用活动许可证:

    如何启用 SCIM 配置

    要为您的 Udemy Business 帐户启用 SCIM 配置,请转到您的 Udemy Business 帐户的管理 > 设置 > 配置 (SCIM)。 

    滚动到“SCIM 集成”部分。然后,按照说明启用 SCIM,从下拉菜单中选择您的身份提供程序并生成凭据(用户名和密码或密钥/持有者令牌),您需要将这些凭据输入您的身份提供程序,作为配置的一部分。

    provisioning_scim_start_setup.png

    根据您使用的身份提供程序,按照以下相应指南的说明完成 SCIM 设置。

    Okta 配置指南 

    Azure AD 配置指南 

    OneLogin 配置指南

    对于其他 IdP 或您自己的工具,请参阅  Udemy SCIM API 配置指南

    如何禁用 SCIM 配置

    要为您的 Udemy Business 帐户禁用 SCIM 配置(如果您要更改提供程序或不再需要 SCIM),请访问管理 > 设置 > 配置 (SCIM)

    滚动到 SCIM 集成部分,点击禁用集成链接并按照说明来禁用 SCIM。这将禁用 Udemy Business 端的集成,但您的 IT 团队还需要禁用身份提供程序端的集成。 

    您可以继续如常使用 Udemy Business,但在此之后需要手动更新平台中的用户和群组信息。

    provisioning_scim_disable_integration.png

    使用 SCIM 取消预配用户

    请注意,从您的身份提供程序取消预配的 Udemy Business 用户将在 Udemy Business 中停用。我们首先部署此“软删除”功能,以便您在以后重新激活这些用户时保留学习者历史记录,并防止意外、不可逆转、匿名处理用户数据。如果要永久删除用户及其所有数据,请按照以下说明操作:

    为 SCIM 托管的学员删除 Pll

    如果您不想再让您的 IdP 通过 SCIM 管理某个学员,您可以先在 SSO Active Directory 中取消其配置,然后在您的 Udemy Business 帐户中删除其 Pll。

    如果您想要直接在您的 Udemy Business 帐户中管理学员,而非通过 SSO IdP 进行管理,或者您不希望删除他们的 PII,请联系我们的支持团队以获取更多帮助。

    阅读文章
  • 使用 Okta 配置 SCIM 预配

    本指南介绍了现有 Okta 和 Udemy Business 客户使用跨域身份管理系统 (SCIM 2.0) 配置 Udemy Business 用户和组的自动预配、取消预配、个人资料更新和群组管理所需的步骤。

    注意:  

    • 如果您已经在 Okta 中为 Udemy Business 启用了 SSO 登录,则无需再次重新配置 SSO。只需在 Okta 中的“应用程序”下查找预配选项卡即可设置 SCIM。 
    • 如果我们的其中一个团队已经通过手动配置为您设置了 SSO,则您应当将我们的 Udemy Business 应用添加到您的 Okta 帐户中。您可以通过搜索 Udemy Business 在“应用”中找到该应用。由于这是我们的应用在 Okta 中的新版本,因此现有客户可能需要先重新配置单点登录 (SSO),然后再启用 SCIM 预配。(逐步操作说明如下)
    • 通过 Okta 预配的用户在首次登录 Udemy Business 应用程序之前不会使用有效的许可证。
    • SCIM 管理的用户和群组只能在 Okta 中更改。
    • 当启用 SCIM 时,Udemy 使用 SCIM 协议通过 SAML 进行属性映射。由于群组不是 SCIM 用户属性,如果您以前将属性映射为仅 SAML 配置的一部分,则群组将不会通过 SAML 传递。

    内容

    • 功能
    • 要求
    • 配置步骤
    • 架构发现
    • 故障排除提示

    特色

    支持以下 SCIM 预配功能:

    • 从 Okta 预配用户
      • 在 Okta 中分配了 Udemy Business 应用程序的用户将在 Udemy Business 中预配。
      • 请注意,如果用户是从 Okta 预配 SCIM 的,则不会收到自动生成的邀请电子邮件。
    • 推送个人资料更新
      • 对于 Okta 中与 Udemy Business 关联的用户,系统会将通过 Okta 对用户个人资料所做的更新推送到 Udemy Business。
    • 推送用户停用
      • 通过 Okta 停用用户或禁用用户对应用的访问将停用 Udemy Business 上的用户并将其从所有群组中移除。
      • 注意:停用的用户将保留他们的学习数据,用于生成报告或将来重新激活。要永久删除 SCIM 管理的停用用户,您首先需要断开该用户的 SCIM 连接,Udemy Business 支持可以帮助执行断开操作。 
    • 重新激活用户
      • 可以在 Udemy Business 中重新激活用户,方法是通过 Okta 将该应用重新分配给用户。
      • 请注意,重新激活的用户将收到一封来自 Udemy 的自动生成的电子邮件,声称他们已被重新激活。
    • 群组推送
      • 系统会将群组及其成员推送到 Udemy Business。管理群组仅限于最初从 Okta 推送的群组,因为我们不会发送在 Udemy Business 上创建的群组信息。

    SCIM 管理的用户的姓名和电子邮件地址旁边有一个灰色的 SCIM 标志。设置了状态 SCIM 的用户在首次登录之前不会使用活动许可证:

     

    配置步骤 

    如果您没有为 Okta 启用 SSO,或者您已经由我们的团队手动配置设置了 SSO,请先在此处完成 Okta SSO 配置步骤

    • 您可以通过在 Okta 控制面板中隐藏 Udemy Business 磁贴来避免任何 SSO 停机,直到新的 SSO 和 SCIM 配置完成。 
    • 在应用可见性旁边,点击“不向用户显示应用图标”。

    1. 首先,单击预配选项卡,然后单击配置 API 集成

    configure_api_integration.png

    2. 单击启用 API 集成并添加您的子域 (udemy.com),为用户名输入 CLIENT_ID,并为密码输入 SECRET_ID

    [通过访问管理 -> 设置下的“预配 (SCIM)”页面,可以在您的 Udemy Business 帐户中生成或查看这些凭据 。]

    3. 单击测试 API 凭据,此时应当显示一条消息,表明您已成功完成 SSO 集成。如果没有,请向 Udemy Business 支持团队发送消息,提供显示的错误消息。


    4. 单击保存,系统会将您重定向到应用程序预配配置页面。provisioning_to_app_save.png

    5. 在转到应用链接上,单击“编辑”以启用各个功能。要使用我们推荐的所有功能,请在此页面上启用创建用户更新用户属性停用用户

    provisioning_to_app_edit.png
    6.单击保存

    7. 单击分配选项卡,将 Udemy Business 分配给单个用户或整个群组。分配的用户将在添加后自动配置,在对其个人资料进行更改时自动修改,并在其从分配中移除时自动停用。

    8. 单击推送群组选项卡,将群组及其成员信息发送到 Udemy Business。

    push_groups_to_ub.png
    9. 单击 + 推送群组,然后选择要推送到 Udemy Business 的群组。

    您可以选择每个群组,或者创建一个自动规则。

    find_groups_ub.png
    10. 选择群组搜索条件,然后为要向 Udemy Business 发送信息的群组填写请求信息。

    push_groups_by_name.png

    11. 选择群组后,选中立即推送群组成员以在选择群组后立即发送群组和群组内成员,然后单击保存

    12. 按照上述步骤为要发送到 Udemy Business 的所有群组选择群组。

    注意:设置后,Udemy Business 将不允许更改 SCIM 管理的用户或群组。

    阅读文章
  • 使用 Udemy 的 SCIM API 配置 SCIM 预配

    概述

    用于跨域身份管理的系统 (SCIM) 是一种标准 API,用于自动化用户和群组预配/取消预配,并将用户和群组数据从客户的身份提供程序 (IdP) 更新到 Udemy Business 帐户中。许多身份提供程序(例如 Okta、Azure AD 和 OneLogin)都支持 SCIM。 您还可以将 Udemy Business SCIM API 用于其他 IdP 或本土工具。

    如果您的组织使用以下 IdP 之一,请参阅下面的指南,了解如何配置 SCIM:

    SCIM 使用标准化的 REST API,数据格式为 JSON。Udemy Business 支持 SCIM 标准的 2.0 版。该 API 适用于 Enterprise 方案中的所有客户。

    Udemy Business SCIM API 支持以下功能:

    • 预配用户
    • 取消预配用户(停用)
    • 更改电子邮件地址
    • 更改用户详细信息
    • 预配群组
    • 在群组中添加/移除用户

    SCIM 协议说明

    SCIM 协议是一种应用级 REST 协议,用于在 Web 上预配和管理身份数据。该协议是客户端-服务器协议,其中客户端是身份提供程序 (IdP),服务器是 Udemy Business。

    基本流程如下:

    • 当客户在 IDP 中为用户授予 Udemy Business 访问权限时,IdP 会向我们发送请求,以检查特定用户是否存在于我们的数据库中。他们通过用户名或电子邮件等属性发出用户搜索请求。
    • 如果用户不存在,则 IdP 会发送创建用户的请求。
    • 如果用户存在,则 IdP 会发送该用户的更新请求。
    • 如果撤销 Udemy Business 的访问权限,则 IdP 会向我们发送从我们的数据库中停用该用户的请求。
    • IdP 还会发送更改用户详细信息的请求。

    如何访问 API?

    为了获取连接到 SCIM API 的授权凭据,必须在您的 Udemy Business 帐户中通过管理 -> 设置 -> 预配 (SCIM) 页面设置 SCIM 集成。请注意:仅管理员可以访问此页面。

    单击开始设置

    provisioning_scim.png

    在下一步中,选择选择提供程序,然后选择自定义

    select_provider.png

    单击生成令牌

    generate_token.png

    在此屏幕上,单击复制以将持有者令牌复制到剪贴板。

    copy_bearer_token.png

     

    您需要在请求中包含带有持有者令牌的授权 HTTP 标头,例如:

    GET /scim/v2/Users HTTP/1.1
    Host: myorganization.udemy.com
    Accept: application/scim+json
    Authorization: Bearer <enter you Bearer token here>
    Content-Type: application/scim+json

    Udemy Business SCIM API 使用 HTTP 协议,并且只能通过安全的 HTTPS 连接使用。

    该 API 的基本 URL 是: https://<yoursubdomain>.udemy.com/scim/v2/

    如果您正在开发一款应用来与 Udemy Business SCIM API 进行交互,建议参考本文档末尾包含的 SCIM RFC。Udemy Business SCIM API 实施符合标准。

    速率限制

    Udemy Business 根据标准 HTTP 速率限制协议对 SCIM API 应用速率限制。如果您的请求受到速率限制,您将收到 HTTP 429 响应,并且您应该等待 Retry-After 标头中指定的时间,然后重试。

    SCIM API 端点

    信息端点

    这些是信息端点,用于配置客户端。他们不需要身份验证,因此您在访问这些端点时不需要包含授权标头。

    GET /ServiceProviderConfig

    返回有关 Udemy Business SCIM 实施的详细信息,包括支持的方法。

    GET /Schemas

    返回 SCIM 实施支持的架构的相关信息。支持的架构是用户和群组。

    GET /Schemas/Users

    返回支持用户资源的所有属性。

    GET /Schemas/Groups

    返回支持群组资源的所有属性。

    用户端点

    您可以使用这些端点列出用户、按属性筛选、添加新用户、更新用户信息或停用用户/将用户匿名。

    如果 SCIM API 未返回所有用户,请联系 Udemy Business 支持。

    支持的属性

     

    SCIM 属性 是否必填? 描述
    电子邮件 [type=”work”]]['value’]
    用户的电子邮件。必须唯一
    用户名
    IdP 的用户名。必须唯一。
    活跃
    标记停用/重新激活用户
    外部 ID
    IdP 用户的外部 ID。必须唯一。
    urn:ietf:params:scim:schemas:extension:
    enterprise:2.0:User:employeeNumber
    从 EnterpriseSchema 返回 employeeNumber 字段并将其存储为 external_id 字段
    name.givenName
    用户的名字。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    name.familyName
    用户的姓氏。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    姓名,{ givenName, familyName }
    用户的名字和姓氏。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    title
    用户的职称,即“高级工程师”
    群组
    用户所属的 SCIM 群组


    请注意:如果您指定不在此列表中的任何其他属性,系统将忽略该属性。

    GET/Users

    返回用户的分页列表,默认情况下每页 12 个用户。您可以传入

    count 

    and

    startIndex 

    以对结果集进行分页。例如:

    GET /scim/v2/Users?startIndex=1&count=100 HTTP/1.1

     Host: myorganization.udemy.com

     Accept: application/scim+json

     Authorization: Bearer <enter you Bearer token here>
    startIndex
    • 是当前结果列表集中第一个结果从 1 开始的索引(偏移)
    • count
      是列表响应页面中返回的资源数量(限制)。您可以在单个请求中检索至多 1000 个用户。如果省略此项目,则默认为 12。

    示例请求

    GET https://demo.udemy.com/scim/v2/Users 
    {
    "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "totalResults": 18,
    "startIndex": 1,
    "Resources": [
    {
    "id": "KwLzN3",
    "externalId": "00u3mlhj4x1E482sK5d7",
    "userName": "firstName.lastName@domain.com",
    "name": {
    "givenName": "firstName",
    "familyName": "lastName",
    "formatted": "firstName lastName"
    },
    "emails": [
    {
    "value": "firstName.lastName@domain.com",
    "type": "work",
    "primary": true
    }
    ],
    "title": "",
    "active": true,
    "groups": [
    {
    "value": "NZOaw",
    "display": "Group Test",
    "$ref": "https://demo.udemy.com/scim/v2/Groups/NZOaw"
    },
    {
    "value": "dn1K8",
    "display": "NewGroup2",
    "$ref": "https://demo.udemy.com/scim/v2/Groups/dn1K8"
    }
    ],
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    ],
    "meta": {
    "resourceType": "User",
    "location": "https://demo.udemy.com/scim/v2/Users/KwLzN3",
    "created": "2022-01-19T01:11:59Z",
    "lastModified": "2024-11-22T21:58:48Z"
    },
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "employeeNumber": "64e63"
    }
    },
    [...]
    ],
    "itemsPerPage": 12
    }

     

    GET /Users?filter=

    此端点用于按特定属性筛选用户。例如,可以根据用户名属性进行搜索:

    GET /Users?filter=userName eq "example..name

    注意:在上述示例中,您需要对 URL 参数进行 URL 编码,因此 URL 将变为:

    GET /Users?filter=userName%20eq%20%22example.name%22

    此时将返回用户资源列表。如果没有任何结果,将返回一个空列表。

    GET Users?filter=groups.value eq "{SCIM_Group_ID}"

    这将返回属于此 SCIM 群组的所有用户

    支持的筛选条件如下:

    userName
    externalID
    emails[type eq=”work”]
    groups

    支持的运算符如下:

    and
    eq

    响应:

    • HTTP 状态代码 200 和成功的实体列表
    • 如果提供了不受支持的筛选条件,则会返回 HTTP 状态代码 501
    POST /Users

    此端点用于在 Udemy Business 中创建(配置)新用户。

    响应将包含一个

    ID 

    属性,在所有后续请求中引用此用户时应当使用该属性。

    请注意:

    • 以这种方式创建的新用户在该用户首次登录之前不会 使用许可证。
    • 如果此用户已有待处理的邀请,则此时将使用该邀请。
      系统会将用户添加到群组,根据邀请中指定的条件分配适当的角色/课程作业。
    • 尝试创建 Udemy Business 中已存在的用户将导致该用户变为由 SCIM 管理(在“管理用户”页面中显示一个小链接图标)。请注意,用户的状态和许可证使用情况不会更改。如果用户处于活跃状态,将保持活跃状态;如果用户已停用,将保持停用状态。

    示例请求

     

    POST https://demo.udemy.com/scim/v2/Users 
    {
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    ],
    "active": true,
    "emails": [
    {
    "primary": true,
    "type": "work",
    "value": "demo.user@test.com"
    }
    ],
    "externalId" : "externalIdValue",
    "meta": {
    "resourceType": "User"
    },
    "userName": "DemoTest",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "employeeNumber": "externalIdValue"
    },
    "name": {
    "familyName": "Test",
    "formatted": "formatted",
    "givenName": "Demo"
    }
    }

    示例响应

    {
    "id": "MPD698",
    "name": {
    "givenName": "Demo",
    "familyName": "Test",
    "formatted": "Demo Test"
    },
    "emails": [
    {
    "value": "demo.user@test.com",
    "type": "work",
    "primary": true
    }
    ],
    "title": "",
    "active": true,
    "groups": [],
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    ],
    "meta": {
    "resourceType": "User",
    "location": "https://demo.udemy.com/scim/v2/Users/MPD698",
    "created": "2024-12-27T22:00:25Z",
    "lastModified": "2024-12-27T22:00:26Z"
    },
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "employeeNumber": "externalIdValue"
    },
    "userName": "DemoTest",
    "externalId": "externalIdValue"
    }

     

    响应:

    • HTTP 状态代码 201 和成功的用户资源
    • 如果组织中已存在具有相同用户名的成员,则会返回 HTTP 状态代码 409
    • 如果请求未通过验证,则会返回 HTTP 状态代码 400,响应正文中会显示错误详细信息
    GET /Users/<id>

    此端点用于检索指定用户的用户详细信息。上述请求中的

    ID

    参数是在使用 SCIM 创建用户或列出所有现有用户时返回的唯一标识符。

    响应:

    • HTTP 状态代码 200 和成功的用户资源
    • 如果未找到用户,则会返回 HTTP 状态代码 404
    PUT /Users/<id>

    此端点用于替换(覆盖)Udemy Business 中的用户详细信息。如果已指定,活跃属性可用于停用或重新激用户。

    示例请求:

    PUT https://demo.udemy.com/scim/v2/Users/MPD698
    {
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    ],
    "id": "MPD698",
    "userName": "demo.user@test.com",
    "externalId": "NewExternalID",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "employeeNumber": "NewExternalID"
    },
    "name": {
    "givenName": "demo",
    "familyName": "user"
    },
    "emails": [
    {
    "value": "demo.user@test.com",
    "type": "work",
    "primary": true
    }
    ],
    "active": true
    }

    示例响应

    {
    "id": "MPD698",
    "name": {
    "givenName": "demo",
    "familyName": "user",
    "formatted": "demo user"
    },
    "emails": [
    {
    "value": "demo.user@test.com",
    "type": "work",
    "primary": true
    }
    ],
    "title": "",
    "active": true,
    "groups": [],
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    ],
    "meta": {
    "resourceType": "User",
    "location": "https://demo.udemy.com/scim/v2/Users/MPD698",
    "created": "2024-12-27T22:00:25Z",
    "lastModified": "2024-12-27T22:17:52Z"
    },
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "employeeNumber": "NewExternalID"
    },
    "userName": "demo.user@test.com",
    "externalId": "NewExternalID"
    }

     

    响应:

    • HTTP 状态代码 200 和更新的用户资源
    • 如果用户不存在,则会返回 HTTP 状态代码 404
    • 如果尝试停用组织所有者,则会返回 HTTP 状态代码 400
    PATCH /Users/<id>

    此端点用于对我们系统中的用户详细信息进行部分更新,这意味着您只能使用此端点来更改用户的某些属性。与之相比,PUT 可替换整个用户。

    它可以包含活跃属性,这将会导致停用或重新激活用户。

    • 每个请求的正文必须包含 URI 值为“urn:ietf:params:scim:api:messages:2.0:PatchOp”的“架构”属性。
    • HTTP PATCH 请求的正文必须包含“操作”属性,其值为一个或多个 PATCH 操作的数组。每个 PATCH 操作对象必须恰好有一个“op”成员,其值指示要执行的操作,并且可以是“添加”、“移除”或“替换”中的一个。
    • “路径”属性可以为空,在这种情况下,“值”应当为采用 {“path”: “value”} 格式的字典。

    示例请求

    PATCH https://demo.udemy.com/scim/v2/Users/MPD698 
    {
    "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:PatchOp"
    ],
    "Operations": [
    {
    "op": "replace",
    "path": "userName",
    "value": "DemoUserName"
    }
    ]
    }

    示例响应

    {
    "id": "MPD698",
    "name": {
    "givenName": "demo",
    "familyName": "user",
    "formatted": "demo user"
    },
    "emails": [
    {
    "value": "demo.user@test.com",
    "type": "work",
    "primary": true
    }
    ],
    "title": "",
    "active": true,
    "groups": [
    {
    "value": "5ypNz",
    "display": "NewGroup",
    "$ref": "https://demo.udemy.com/scim/v2/Groups/5ypNz"
    }
    ],
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:User",
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User"
    ],
    "meta": {
    "resourceType": "User",
    "location": "https://demo.udemy.com/scim/v2/Users/MPD698",
    "created": "2024-12-27T22:00:25Z",
    "lastModified": "2024-12-27T22:17:52Z"
    },
    "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User": {
    "employeeNumber": "NewExternalID"
    },
    "userName": "DemoUserName",
    "externalId": "NewExternalID"
    }

    响应:

    • HTTP 状态代码 200 和更新的成功用户资源
    • 如果未找到用户,则会返回 HTTP 状态代码 404
    • 如果尝试停用组织所有者或操作无效,则会返回 HTTP 状态代码 400

    群组端点

    支持的属性

    SCIM 属性

    是否必填?

    描述

    显示名称

    群组标题。在所有 Udemy Business 群组中必须唯一。

    外部 ID

    身份提供程序中的群组外部 ID

    请注意:如果您指定不在此列表中的任何其他属性,系统将忽略该属性。

    GET /Groups

    此端点用于获取所有已预配群组的分页列表。包括对结果进行分页的 startIndexcount 查询字符串参数。

    请记住,只会返回使用 SCIM 创建的群组。不会返回在 Udemy Business 中创建的群组。

    示例请求

    GET https://demo.udemy.com/scim/v2/scim/v2/Groups
     "schemas": [
    "urn:ietf:params:scim:api:messages:2.0:ListResponse"
    ],
    "totalResults": 6,
    "startIndex": 1,
    "Resources": [
    {
    "id": "NZOaw",
    "displayName": "Group Test",
    "members": [
    {
    "value": "KwLzN3",
    "display": "firstName lastName",
    "type": "User",
    "$ref": "https://demo.udemy.com/scim/v2/Users/KwLzN3"
    },
    {
    "value": "eBmzpr",
    "display": "user four",
    "type": "User",
    "$ref": "https://demo.udemy.com/scim/v2/Users/eBmzpr"
    }
    ],
    "externalId": null,
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:Group"
    ],
    "meta": {
    "resourceType": "Group",
    "location": "https://demo.udemy.com/scim/v2/Groups/NZOaw",
    "created": "2024-08-23T22:26:48Z",
    "lastModified": "2024-08-23T22:26:48Z"
    }
    },
    [...]
    ],
    "itemsPerPage": 12
    }
    GET /Groups?filter=

    此端点用于按特定属性筛选群组。例如,可以根据显示名称属性进行搜索:

    GET /Groups?filter=displayName eq "Marketing”

    此时将返回群组资源列表。如果没有任何结果,将返回一个空列表。

    请注意:您需要对参数进行 URL 编码,因此请求会变为:

    GET /Groups?filter=displayName%20eq%20%22Marketing%22

    支持的筛选条件如下:

    displayName
    externalId
    Id
    member.value

    支持的运算符如下:

    and
    eq

    响应:

    • HTTP 状态代码 200 和成功的实体列表
    • 如果使用了不受支持的筛选条件,则会返回 HTTP 状态代码 501
    POST /Groups

    此端点用于在 Udemy Business 中创建(预配)新群组。

    响应:

    • HTTP 状态代码 409。如果组织中已存在相同名称的已预配群组,我们将返回 409(冲突)唯一的 scimType 错误代码。
    • 成功创建群组后,我们将返回该群组的完整表示形式,HTTP 状态代码 201(已创建)以及包含创建群组资源 URL 的 Location 标头。
    GET /Groups/<id>

    此端点用于从 Udemy Business 中提取群组详细信息。

    响应:

    • HTTP 状态代码 200 和群组资源
    • 如果未找到群组,则会返回 HTTP 状态代码 404
    POST /Groups

    此端点用于在 Udemy Business 中创建(预配)新群组。

    警告:使用 POSTPUT /scim/v2/Groups 端点创建群组时,不要在请求中包含 members 属性。将会忽略任何指定的成员。要将用户添加到群组,请先创建群组,然后单独调用 PATCH /scim/v2/Groups/

    示例请求

    https://demo.udemy.com/scim/v2/Groups 
    {
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:Group"
    ],
    "displayName": "Group1",
    "externalId": "234523"
    }

    示例响应

    {
    "id": "vREOw",
    "displayName": "Group1",
    "members": [],
    "externalId": "234523",
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:Group"
    ],
    "meta": {
    "resourceType": "Group",
    "location": "https://demo.udemy.com/scim/v2/Groups/vREOw",
    "created": "2025-01-15T22:24:54Z",
    "lastModified": "2025-01-15T22:24:54Z"
    }
    }
    PUT /Groups/<id>

    此端点用于替换 Udemy Business 中的群组详细信息。

    警告:使用 POSTPUT /scim/v2/Groups 端点创建群组时,不要在请求中包含 members 属性。将会忽略任何指定的成员。要将用户添加到群组,请先创建群组,然后单独调用 PATCH /scim/v2/Groups/

    示例请求

    PUT https://demo.udemy.com/scim/v2/Groups/vREOw 
    {
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:Group"
    ],
    "displayName": "Group1",
    "externalId": "MPD699"
    }

    示例响应

    {
    "id": "vREOw",
    "displayName": "Group1",
    "members": [],
    "externalId": "MPD699",
    "schemas": [
    "urn:ietf:params:scim:schemas:core:2.0:Group"
    ],
    "meta": {
    "resourceType": "Group",
    "location": "https://demo.udemy.com/scim/v2/Groups/vREOw",
    "created": "2025-01-08T21:12:53Z",
    "lastModified": "2025-01-15T22:35:55Z"
    }
    }

    响应:

    • HTTP 状态代码 200 和更新的群组资源
    • 如果群组不存在,则会返回 HTTP 状态代码 404
    •  
    PATCH /Groups/<id>

    此端点用于对 Udemy Business 中的群组详细信息进行部分更新。

    PATCH 端点比其他端点更难以处理,因为它支持不同类型的操作(及其组合):

    示例请求

    PATCH https://demo.udemy.com/scim/v2/Groups/5ypNz 
    { "schemas": 
    ["urn:ietf:params:scim:api:messages:2.0:PatchOp"],
    "Operations":[
    {
    "op":"add",
    "path": "members",
    "value":[{
    "display": "demo user",
    "$ref":"https://demo.udemy.com/scim/v2/Users/MPD698",
    "value": "MPD698"
    }
    ]
    }
    ]
    }

    示例响应

    204 No Content
    • 替换操作可更改指定值。在我们的示例中为群组名称或成员。
    • 移除操作可从群组中移除成员。
    • 添加操作可向群组添加成员。

    规则如下:

    • 我们永远不会从群组中移除未预配的成员(例如,在“替换”成员操作时)。
    • 无论操作次数多少,系统都将 PATCH 请求视为原子操作。

    输入验证如下:

    • 每个请求的正文必须包含 URI 值为“urn:ietf:params:scim:api:messages:2.0:PatchOp”的“架构”属性。
    • HTTP PATCH 请求的正文必须包含“操作”属性,其值为一个或多个 PATCH 操作的数组。每个 PATCH 操作对象必须恰好有一个“op”成员,其值指示要执行的操作,并且可以是“添加”、“移除”或“替换”中的一个。
    • “路径”属性可以为空,在这种情况下,“值”应当为采用 {“path”: “value”} 格式的字典。
    • 对于“移除”操作,需要“成员”路径。
    • 对于“添加”操作,应当存在“成员”或“外部 ID” “路径”。
    • 对于“替换”操作,可能存在“成员”路径。如果不存在,则意味着我们正在替换群组详细信息(如群组名称)而不是成员。

    注意:

    • 向群组分配/取消分配用户是异步操作,因此不会在 Udemy Business 中立即反映这些更改。
    • 我们不支持嵌套群组,因此在此请求期间将会忽略这些群组。

    响应:

    • 如果操作成功,则会返回 HTTP 状态代码 204
    • 如果群组不存在,则会返回 HTTP 状态代码 404
    • 如果尝试向非组织成员用户分配群组,则会返回 HTTP 状态代码 404 和错误详细信息
    • 如果请求未通过验证,则会返回 HTTP 状态代码 400,响应正文中会显示错误详细信息
    DELETE /Groups/<id>

    此端点用于移除或取消配置 Udemy Business 中的群组。

    规则如下:

    • 如果群组中包含未预配的成员,则会从群组中移除已预配的用户,删除“OrganizationSCIMGroup”记录。

    响应:

    • 如果操作成功,则会返回 HTTP 状态代码 204
    • 如果群组不存在,则会返回 HTTP 状态代码 404

    延伸阅读

    阅读文章
  • 使用已批准的电子邮件域帮助用户“自助”访问 Udemy Business

    我们有两种方式可以帮助用户访问您的 Udemy Business 帐户 - 通过单点登录 (SSO) 和通过管理员/群组管理员发送的邀请。

    如果您使用邀请流程,此功能为额外选项,让您的用户在使用您(管理员)预设的经批准/验证的电子邮件地址域后,可以从您的帐户登录页面(例如 company.udemy.com)自行触发邀请电子邮件。

    如何批准电子邮件地址域

    在网页上名为电子邮件域访问设置部分,管理员可以指定一个电子邮件域(或多个域)批准加入您的 Udemy Business。

    email_domain_access.png

    此功能适用于 Team 和 Enterprise 方案 - 但在电子邮件域访问页面设置经批准的电子邮件域功能只有所有者和管理员可以访问,群组管理员无法访问。

    共享您的帐户登录页面 URL 以供用户注册

    您可以通过 Slack、电子邮件、 Wiki 或内联网与组织中拥有访问权限的用户和群组分享您的 Udemy Business 帐户登录页面 URL,也可以直接将链接添加到您的学习管理系统 (LMS)。

    用户访问您的帐户登录页面 URL 时,他们可以输入其电子邮件地址以注册,只要输入的电子邮件地址与管理员预设的经批准的电子邮件域匹配。

    请注意:为确保平台安全可靠地运行,我们需要对新注册的帐户进行电子邮件验证。如果遇到问题,请查看下面的故障排除步骤

    UB_login.jpg

    输入已批准的电子邮件地址后,他们会在屏幕上看到说明,指导他们查看电子邮件中的邀请。这是我们验证用户电子邮件地址的方式。

    check_your_email_for_invitation.png

    许可证使用和验证

    用户必须完成其帐户的注册才能获得许可证。 

    如果没有可用的许可证,我们会向用户显示如下消息,以联系其经理或 IT 部门。

    all_licenses_have_been_allocated.png

    用户会收到邀请电子邮件,然后点击邀请中的链接以继续注册,添加其姓名、电子邮件及密码。系统将提示用户 通过验证电子邮件验证他们的帐户信息,其中包含的链接在一小时内有效*。验证完他们的帐户后,用户便可以首次登录并开始学习。 

    *请注意,单点登录 (SSO) /跨域管理系统 (SCIM) 用户不需经过此验证流程。

    send_verification_email.png

    activate_account_email.png

    如果用户输入的电子邮件地址与已批准的电子邮件域不匹配,他们会看到如下消息,系统将阻止他们注册。

    not_invited_to_this_account.png

    如果没有可用的许可证,我们会向用户显示如下消息,以联系其经理或 IT 部门。

    no_licenses.png

    通过经批准的电子邮件流程注册的用户将显示在管理用户待处理邀请屏幕上,但他们会显示为“通过经批准的电子邮件邀请”以此为区分。

    invited_through_approved_email.png

    此功能适用于 Team 和 Enterprise 方案 - 但在用户访问页面设置经批准的电子邮件域功能只有所有者和管理员可以访问,群组管理员无法访问。

    阅读文章