• 如何更新您的 Udemy SCIM 持有者令牌

    Udemy SCIM 持有者令牌是一种安全凭证,允许您的身份提供程序 (IdP) 在通过 SCIM 配置和管理用户和群组时向 Udemy Business 验证身份。 

    当您通过提供程序设置 SCIM 时,您会在 Udemy Business 管理设置中的“管理 → 设置 → 配置 (SCIM)”下生成此令牌。IdP 将在调用组织 SCIM API (https://{your-org}.udemy.com/scim/v2/) 时,通过 Authorization 头传递该令牌 (Bearer <token>)。每个令牌专属于您的组织,有效期为两年。令牌生成后,请立即复制并妥善保管。 

    要更新或重新生成您当前的 SCIM 令牌,您需要对您的 Udemy Business 帐户具有管理员访问权限。如果您拥有相应访问权限,请转到“管理 → 设置 → 配置 (SCIM)”并单击“重新生成凭据”。请确保您拥有身份提供程序 (IdP) 的访问权限,或联系您的身份提供程序管理员以更新您的新令牌。

    请注意:如果您重新生成凭据,所有既往令牌均将失效;在您前往身份提供程序 (IdP) 更新令牌之前,集成将停止运行。 

    如果您使用的是旧版连接,您可以按照这份指南更新到我们更新后的持有者令牌身份验证,或者单击“生成令牌”。

    Okta legacy.png

    阅读文章
  • 使用 Udemy 的 SCIM API 管理用户许可证

    本文概述了组织如何使用 Udemy 的跨域身份管理系统 (SCIM) API 添加或移除用户许可证。  

    许多身份提供程序(例如 Okta 和 OneLogin)都支持 SCIM。您还可以将 Udemy Business SCIM API 用于其他 IdP 或本土工具。

    注意:Udemy Business 的 SCIM API 令牌有效期约为两年。管理员将收一则通知,告知他们:

    • 令牌到期前 30 天
    • 令牌到期后

    许可证使用情况

    在身份提供程序中,许可证通常在群组级别分配,在某些情况下,也在个人级别分配。当请求中包含 licenseTypes 属性时,将为相关用户指定许可证类型。

    • 此属性可在创建用户时添加,用户在激活其 Udemy Business 帐户后即可领取指定的许可证。
    • 此属性也可为现有用户添加,并且可以授予或移除现有许可证。
    • 如果帐户中所需类型的许可证不足,Udemy Business 将向 IdP 发送错误消息,并且不会进行任何更改。

    对移除许可证的限制:

    用户必须拥有许可证类型。要释放用户的所有许可证,需要在贵组织的帐户中停用该用户。如果 Udemy Business 收到空白的 licenseTypes 属性,系统将忽略它。 

    目前不支持非活跃用户(即已预配置两个方案的许可证但尚未登录的用户)从“Pro”降级到“Enterprise”许可证。 

    提供所需的 licenseTypes 属性

    贵组织的身份提供程序必须包含的 licenseTypes 属性是:

    urn:ietf:params:scim:schemas:extension:udemy:2.0:User

    此属性应以字符串列表的形式提供,每个字符串代表一个许可证名称(有关更多信息,请参阅下面关于许可证类型的部分)。

    提供可接受的值和对应的许可证类型

    为了管理用户的许可证类型,需要输入可接受的值。下表中的输入值将根据 Udemy Business 支持的许可证类型进行验证。许可证名称值不区分大小写。 

     

    许可证名称 类型

    可接受的值示例

    Enterprise 方案许可证
    Enterprise、eNtErpRisE、enTERprise
    等等

    Pro

    其他许可证

    Pro、pRo、PRo
    等等

     

    注意:如果提供了不可接受的值,将会出现错误通知。

    如何在创建用户时包括 licenseTypes

    以下示例显示了当创建用户时应在身份提供程序中输入什么内容以包括 licenseTypes

    POST /scim/v2/Users HTTP/1.1 Host: myorganization.udemy.com Accept: application/scim+json Authorization: Bearer <enter your Bearer token here> Content-Type: application/scim+json {    "schemas": [        "urn:ietf:params:scim:schemas:core:2.0:User",        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",        "urn:ietf:params:scim:schemas:extension:udemy:2.0:User"    ],    "userName": "john.doe@udemy.com",    "externalId": "someexternalidtest12312",    "name": {        "givenName": "John",        "familyName": "Doe"    },    "emails": [        {            "primary": true,            "type": "work",            "value": "john.doe@udemy.com"        }    ],    "active": true,    "urn:ietf:params:scim:schemas:extension:udemy:2.0:User": {        "licenseTypes": ["Enterprise", "Pro"]    } }

    如何替换现有用户的属性并包括 licenseTypes

    以下示例显示了应输入什么内容以替换现有用户属性并包括 licenseTypes

    PUT /scim/v2/Users/<scim-user-uuid> HTTP/1.1

    Host: myorganization.udemy.com

    Accept: application/scim+json

    Authorization: Bearer <enter your Bearer token here>

    Content-Type: application/scim+json

    {

      "schemas": [

        "urn:ietf:params:scim:schemas:core:2.0:User",

        "urn:ietf:params:scim:schemas:extension:enterprise:2.0:User",

        "urn:ietf:params:scim:schemas:extension:udemy:2.0:User"

      ],

        "userName": "john.doe@udemy.com",

        "externalId": "someexternalidtest12312",

        "name": {

            "givenName": "John",

            "familyName": "Doe"

        },

        "emails": [

            {

                "primary": true,

                "type": "work",

                "value": "john.doe@udemy.com"

            }

        ],

      "active": true,

      "urn:ietf:params:scim:schemas:extension:udemy:2.0:User": {

        "licenseTypes": ["Enterprise", "Pro"]

      }

    }

    如何仅设置现有用户的 licenseTypes 字段

    要仅设置现有用户的 licenseTypes 字段,PATCH 请求有两种使用方式:

    "op": "add" 

    要将加载项许可证(即“Pro”)添加到现有许可证,请使用:

    "op": "replace" 

    来覆盖现有值。

    注意:

    使用 add 操作,可以将 Udemy Business Pro 许可证添加到现有许可证(Enterprise 或 Enterprise+Pro 许可证)。对于已拥有 Enterprise 许可证的用户,将会添加 Pro 许可证。对于已拥有 Enterprise+Pro 许可证的用户,不会添加额外的许可证。

    以下示例显示了应输入什么内容以仅设置现有用户的 licenseTypes 字段:

    PATCH /scim/v2/Users/<scim-user-uuid> HTTP/1.1 Host: myorganization.udemy.com Accept: application/scim+json Authorization: Bearer <enter your Bearer token here> Content-Type: application/scim+json {    "schemas": [        "urn:ietf:params:scim:api:messages:2.0:PatchOp",        "urn:ietf:params:scim:schemas:extension:udemy:2.0:User",    ],    "Operations": [        {            "op": "add",            "urn:ietf:params:scim:schemas:extension:udemy:2.0:User": {                "licenseTypes": ["Pro"]            }        }    ] }W

    如何覆盖用户当前的整套许可证

    使用 replace 操作,可以覆盖用户当前的整套许可证。为此,必须输入以下内容。

    PATCH /scim/v2/Users/<scim-user-uuid> HTTP/1.1 Host: myorganization.udemy.com Accept: application/scim+json Authorization: Bearer <enter your Bearer token here> Content-Type: application/scim+json {    "schemas": [        "urn:ietf:params:scim:api:messages:2.0:PatchOp",        "urn:ietf:params:scim:schemas:extension:udemy:2.0:User",    ],    "Operations": [        {            "op": "replace",            "urn:ietf:params:scim:schemas:extension:udemy:2.0:User": {                "licenseTypes": ["Enterprise", "Pro"]            }        }    ] }
    阅读文章
  • 使用 Entra ID 配置 SCIM 预配(Entra ID 以前称为 Azure AD)

    设置单点登录 (SSO) 后, 您可以通过 Udemy Business 在 Entra ID( 以前称为 Azure AD)中为 Udemy 配置跨域身份管理 (SCIM 2.0) 预配。

    SCIM 预配允许您在 Entra ID 中预配、取消预配、创建群组、管理群组成员、管理许可证和更改用户个人资料详细信息(如姓名和电子邮件地址),这会自动更新 Udemy Business。您将不再需要使用这些操作分别更新 Entra ID 和 Udemy Business,因为它们都将在 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 中手动创建群组。
    • 注意:Udemy Business 的 SCIM API 令牌有效期约为两年。管理员将收一则通知,告知他们:
      • 令牌到期前 30 天
      • 令牌到期后

    目录

    使用 Entra ID 配置 SCIM 预配

    1. 在 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)

    Secret 令牌:这是可以在您的 Udemy Business 帐户中生成或查看的“持有者”令牌。

    • 转到管理 > 设置 > 用户访问以获取 Secret 令牌。

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

    7. (可选)如果想要从 Azure 接收有关错误的警报,请输入电子邮件地址。

    1d.png

    8. 在映射中:

    转到“预配 Microsoft Entra ID 用户”:

    User Mapping (1).png

    进入后,您应能看到属性映射列表

    支持的属性

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

    SCIM 属性 是否必填? 描述
    emails[type eq "work"].value
    用户的电子邮件。必须唯一
    userName
    来自 IdP 的用户名。必须唯一。
    active
    标记停用/重新激活用户
    externalId
    IdP 用户的外部 ID。必须唯一。
    urn:ietf:params:scim:schemas:extension: enterprise:2.0:User:employeeNumber
    从 EnterpriseSchema 返回 employeeNumber 字段并将其存储为 external_id 字段。应与您要发送到 externalId 的属性匹配。
    name.givenName
    用户的名字。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    name.familyName
    用户的姓氏。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    name, { givenName, familyName }
    用户的名字和姓氏。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    title
    用户的职称,例如“高级工程师”。
    urn:ietf:params:scim:schemas:extension: udemy:2.0:User:licensePoolName
    许可证池名称。
    urn:ietf:params:scim:schemas:extension: udemy:2.0:User:licenseTypes

    许可证类型的逗号分隔列表。 

    可接受的值:

    • Enterprise
    • Enterprise Pro

    确保 emails[type eq "work"].value 的 Microsoft Entra ID 属性与您在 SSO 电子邮件属性和声明中配置的值一致。(例如 mailuserPrincipalName

    Edit_attribute.jpg

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

    mapping_type.jpg

    您添加属性后,请更新匹配优先级,使 emails[type eq "work"].value 设置为 1
    您可能需要将 userName 更新为 2 或 3。

    Matching Precedence.png

    9. 向下滚动到用户属性映射的底部,并启用显示高级选项。选择编辑 customapsso 的属性列表,并为 iduserName 启用正确大小写

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

    1h.png

     

    11. 在范围字段中,选择您想要同步用户和群组的方式。

    1i.png

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

    1j.png

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

    12. 单击用户和群组

    users_and_groups.png

    13. 单击添加用户,可用于选择添加用户和群组。

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

    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 配置。 

    注意:Udemy Business 的 SCIM API 令牌有效期约为两年。管理员将收一则通知,告知他们:

    • 令牌到期前 30 天
    • 令牌到期后

    如何启用 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. 导航到“参数”选项卡:

    支持的属性

    请确认以下必需的属性已添加到参数选项卡属性中,因为 SCIM 预配在 Udemy 中正常工作需要这些字段。

    SCIM 属性 是否必填? 描述
    SCIM.email

    用户的电子邮件。必须唯一
    外部 ID

    IdP 用户的外部 ID。必须唯一。建议将此项映射到您的 OneLogin ID
    urn:ietf:params:scim:schemas:extension:enterprise:2.0:User:employeeNumber 

    此字段是必需的,用于存储 externalId 值。应与 externalId 值匹配。
    SCIM.name.givenName

    用户的名字。虽然它们不是必需的属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    SCIM.name.familyName

    用户的姓氏。虽然它们不是必需的属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。

     

    OneLogin Parameters (1).png


    注意:由于 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 做什么:

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

    不能用 SCIM 做什么:

    • 通过 SCIM 删除任何身份提供程序上的个人可识别信息 (PII)
    • 将数据从 Udemy Business 同步回身份提供程序。
    • 管理角色(管理员、群组管理员、用户)。
    • 请注意:如果通过 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 进行属性映射。由于群组不是 SCIM 用户属性,如果您以前将属性映射为仅 SAML 配置的一部分,则群组将不会通过 SAML 传递。
    • Udemy Business 的 SCIM API 令牌有效期约为两年。管理员将收一则通知,告知他们:

      • 令牌到期前 30 天
      • 令牌到期后

    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 托管的学习者删除 PII

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

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

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

     

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

    如果您已经配置了 SCIM 预配,想要使用新版 Udemy Business 应用,则需要将现有集成迁移到持有者令牌身份验证。

    注意:

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

    目录

    SCIM 预配功能

    支持以下 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 上创建的群组信息。
    • 导入用户和群组
      • 如果您在 Okta 中切换到新的 Udemy Business 应用,则可以将现有集成中的用户和群组导入到新的集成中。

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

     

    开始之前

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

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

    配置步骤

    1. 在 Udemy Business 应用中,选择常规选项卡,然后填写以下字段:

    • 子域:Udemy Business 域名
    • 域:udemy.com
    • 受众 URI(SP 实体 ID):PingConnect

    2. 在预配选项卡上,单击配置 API 集成

    configure_api_integration.png

    3. 选择启用 API 集成并添加 API 令牌。

    您可以通过以下导航路径在 Udemy Business 帐户中生成和查看 API 令牌:管理 > 设置 > 预配 (SCIM)

     

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

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

    6. 在设置 > 转到应用中,单击编辑以启用各个功能。

    要使用我们推荐的所有功能,建议启用创建用户更新用户属性停用用户。单击保存

    provisioning_to_app_save.png

     

    provisioning_to_app_edit.png

    7. (可选)配置文件属性:在您的 Okta 帐户中,转到目录 > 配置文件编辑器 > 您的应用程序名称。 

    8. 在配置文件编辑器页面上,单击添加属性

    9. 在添加属性页面上,使用以下属性填写这些字段:

    属性名称 数据类型 显示名称 变量名称 外部名称 外部名称空间 eNUM
    licenseTypes
    字符串数组 许可证类型 licenseTypes licenseTypes urn:ietf:params:scim:schemas:extension:udemy:2.0:User 已启用
    licensePoolName
    string 许可证池名称 licensePoolName licensePoolName urn:ietf:params:scim:schemas:extension:udemy:2.0:User  
    外部 ID
    string Udemy 外部 ID UdemyExternalId 外部 ID urn:ietf:params:scim:schemas:core:2.0:User  
    employeeNumber
    string employeeNumber employeeNumber employeeNumber urn:ietf:params:scim:schemas:extension:enterprise:2.0:User  
    标题
    string 标题 Udemytitle 标题 urn:ietf:params:scim:schemas:core:2.0:User  

    10. 单击添加属性保存并添加另一个

    添加属性后,您应该会看到类似以下的内容被添加到配置文件中。

    将用户分配到许可证池

    要将用户分配到许可证池:

    1. 在 Okta 管理员页面的左侧,导航到应用程序 → 应用程序

    2. 选择您的应用程序。

    3. 转到分配选项卡。

    4. 单击分配,然后单击分配给人员分配给群组

    5. 输入该用户或群组的属性。

    用户属性:

    群组属性:

    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 管理的用户或群组。

     

    将现有集成迁移到持有者令牌以允许在 Okta 中使用新版 Udemy Business 应用

    如果您已经使用 Okta 配置了 SCIM 预配,想要在 Okta 中使用 Udemy Business 应用程序,则需要先迁移到持有者令牌身份验证。请按照以下步骤迁移您的集成。

    第 1 步:在 Udemy Business 中生成令牌

    1. 在 Udemy Business 管理员帐户中,导航到管理 > 设置 > 预配 (SCIM)

    如果您已经拥有基于用户名/密码的 Okta 集成,您将在操作面板上看到这些凭据。

    2. 单击生成令牌,您将会看到一个确认模态框,询问您是否要为 SCIM 集成生成持有者令牌。

    • 确认后,您先前的凭据将不再显示在“预配 SCIM”中,但这些凭据对其他现有集成(例如 LMS、用于学习活动的公共 API 等)仍然有效。 

    结果

    生成后,将会显示成功消息,并且持有者令牌将出现在预配 SCIM 页面上。您可以单击复制,复制持有者令牌用于 Okta 设置。 

    刷新页面后,成功消息将会消失,并且下拉选项将从 Okta(旧版)更改为 Okta

    第 2 步:在 Okta 中更新集成

    要完成迁移,您需要在 Okta 中更新集成。 

    1. 在您的 Okta 管理员帐户中,导航到应用程序 > 应用程序 > 浏览应用目录,并搜索 Udemy Business

    2. 添加集成并填写详细信息,包括子域受众 URI(SP 实体 ID)。 


     

    3. 在预配选项卡上,单击启用 API 集成。 

    4. 当系统提示您提供 API 令牌时,粘贴您之前从 Udemy Business 复制的持有者令牌。

    5. 单击测试 API 凭据以测试连接。 

    如果测试成功,您可以放心单击保存

    测试 API 凭据

    6. 在预配选项卡中,导航到设置 > 转到应用,并确保所有类型的配置均已启用:

    • 创建用户
    • 更新用户属性
    • 停用用户

    注意:完成此步骤后,在此新版 Udemy Business 应用程序中进行的所有更改都将影响您在 Udemy Business 中的预配。

    Provisioning to App.png

     

    结果

    您对新版 Udemy Business 应用程序的基本集成现已完成。 

    第 3 步:管理您的旧版 Udemy Business 应用程序

    创建新集成后,您必须在以下两个选项之间进行选择:

    选项 1:禁用旧集成

    • 优点:将只有一个可靠来源,并且您可以确保在新集成中进行的任何更改都将保留下来。
    • 缺点:您的用户将无法在 Udemy Business 中通过 SSO 来登录。

    选项 2:保留旧集成

    • 优点:使用 Udemy Business 的用户不会遇到任何停机时间。
    • 缺点:如果有人更改旧集成,这些更改将覆盖新集成。您必须谨慎管理过渡过程,并告知其他管理员不要更改旧集成中的任何用户或群组。

    第 4 步:将用户导入新集成

    您有两种方式将用户导入新集成:

    • 自动导入
    • 审核并自行导入

    完成导入所需的时间取决于应用程序中的用户数量,可能从几秒钟到几分钟不等。 

    选项 1:自动导入用户

    要自动导入用户:

    1. 导航到新版 Udemy Business 应用程序的预配选项卡。
    2. 在左侧,选择转到 Okta
    3. 用户创建与匹配设置下,您将看到以下选项,用于自动导入并确认分配:
      • 在下列情况下,导入的用户与 Okta 用户完全匹配:
        • 选择电子邮件匹配
      • 允许部分匹配
        • 选择名字和姓氏部分匹配
      • 确认匹配的用户
        • 选择自动确认完全匹配
        • 选择自动确认部分匹配
      • 确认新用户下:
        • 选择自动确认新用户

    用户创建与匹配

    4. 单击保存

    5. 在 Udemy Business 应用中,导航到导入选项卡。

    6. 单击立即导入

    自动导入群组

    选项 2:审核并自行导入

    要自行导入用户:

    1. 在 Udemy Business 应用中,导航到导入选项卡。
    2. 单击立即导入

    第 5 步:将群组导入新集成

    注意:您需要先将所有用户添加到新集成,然后才能开始添加群组。

    要将群组导入新集成:

    1. 在新版 Udemy Business 应用中,导航到推送群组选项卡。 

    2. 单击刷新应用群组

    3. 选择推送群组 > 按名称查找群组

    将群组推送到 Udemy Business

    4. 在左侧,单击按名称,然后使用关联群组选项。

    关联群组

    5. 单击保存保存并添加另一个,然后对其余群组重复相同过程。

    阅读文章
  • 使用 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 支持以下功能:

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

    注意:Udemy Business 的 SCIM API 令牌有效期约为两年。管理员将收一则通知,告知他们:

    • 令牌到期前 30 天
    • 令牌到期后

    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 属性 是否必填? 描述
    emails[type=”work”]]['value’]
    用户的电子邮件。必须唯一
    userName
    IdP 的用户名。必须唯一。
    active
    标记停用/重新激活用户
    externalId
    IdP 用户的外部 ID。必须唯一。
    urn:ietf:params:scim:schemas:extension:
    enterprise:2.0:User:employeeNumber
    从 EnterpriseSchema 返回 employeeNumber 字段并将其存储为 external_id 字段
    costCenter
    用于标识用户成本中心的名称或代码。
    department
    用户所属部门的名称。
    division
    用户所属分部的名称。
    name.givenName
    用户的名字。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    name.familyName
    用户的姓氏。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    name, { givenName, familyName }
    用户的名字和姓氏。虽然这不是必填属性,但我们建议始终指定这些属性,因为这样便于轻松识别用户。
    title
    用户的职称,即“高级工程师”
    licenseTypes

    许可证类型的逗号分隔列表。 

    可接受的值:

    • Enterprise
    • Enterprise, Pro
    licensePoolName
    许可证池名称。
    manager.value(如果 manager 是对象)
    否则为 manager(如果 manager 本身就是值)




     

    用户经理的 SCIM ID

    organization
    用户所属组织的名称。


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

    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 属性 是否必填? 描述
    displayName
    群组标题。在所有 Udemy Business 群组中必须唯一。
    externalId
    身份提供程序中的群组外部 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 中创建(预配)新群组。

    警告:使用 POST 或 PUT/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 中的群组详细信息。

    警告:使用 POST 或 PUT/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 方案 - 但在用户访问页面设置经批准的电子邮件域功能只有所有者和管理员可以访问,群组管理员无法访问。

    阅读文章