Composer 中的 ThingWorx 模型定义 > 安全 > 目录服务 > 在 Active Directory 中管理用户
在 Active Directory 中管理用户
如果用户已存在于 Microsoft Active Directory (AD) 目录服务中,则可在 ThingWorx 中管理用户和用户组。ThingWorx 允许将 Active Directory 用户组映射到 ThingWorx 用户组。用户设置选项允许创建、修改或删除用户。在 ThingWorx 中管理每个用户组的权限。
* 
ThingWorx 中默认不启用 Active Directory 功能。ThingWorx 管理员用户必须启用 Active Directory,才可以使用它在 ThingWorx 中进行身份验证。
本主题提供了以下信息:
快速上手
开始使用前,请在 ThingWorx 中创建目录服务,方法是将包含实体的 XML 文件导入 ThingWorx。导入文件后,您可以在 ThingWorx 中配置目录服务。在使用 XML 文件时,请遵循以下规则:
该 XML 文件必须包含一个或多个使用 com.thingworx.security.directoryservices.ActiveDirectoryDirectoryService Java 类作为 DirectoryService 元素的 className 属性的目录服务。
对于每个 DirectoryService 元素,必须提供 name 的唯一值。
ThingWorx 运行时中存在的所有目录服务中的 name 值也必须具有唯一性。
priority 属性应具有唯一的优先级顺序编号才能进行身份验证。此外,应将唯一的优先级顺序添加到文件中以及 ThingWorx 运行时中的每个目录服务。此优先级顺序对应于验证凭据期间 ThingWorx 参考目录服务时应遵循的顺序。
* 
目录服务以链接的优先级顺序进行身份验证。如果具有最低优先级设置 (在下面的示例中为 1) 的目录服务无法验证用户身份验证,则链将尝试使用具有下一个最高优先级的链中的目录服务来验证用户。参见以下示例。
XML 示例:单一目录服务
在下面的示例中,包含了在 ThingWorx 中导入新目录服务所需的最低配置 xml 文件。
* 
下面的示例适用于管理员用户。

<Entities>
<DirectoryServices>
<DirectoryService
className="com.thingworx.security.directoryservices.ActiveDirectoryDirectoryService"
description="Active Directory Directory Services"
documentationContent="" enabled="false" homeMashup=""
lastModifiedDate="" name="ADDS1" priority="1" projectName=""
tags="">
<Owner name="Administrator" type="User" />
<avatar />
<DesignTimePermissions>
<Create />
<Read />
<Update />
<Delete />
<Metadata />
</DesignTimePermissions>
<RunTimePermissions />
<VisibilityPermissions>
<Visibility />
</VisibilityPermissions>
<ConfigurationTables/>
<ConfigurationChanges />
</DirectoryService>
</DirectoryServices>
</Entities>

XML 示例:两个目录服务
在下面的示例中,有两个目录服务。priority 属性在每个 DirectoryService 中定义。
<Entities>
<DirectoryServices>
<DirectoryService
className="com.thingworx.security.directoryservices.ActiveDirectoryDirectoryService"
description="Active Directory Directory Services"
documentationContent="" enabled="false" homeMashup=""
lastModifiedDate="" name="ADDS1" priority="1" projectName=""
tags="">
<Owner name="Administrator" type="User" />
<avatar />
<DesignTimePermissions>
<Create />
<Read />
<Update />
<Delete />
<Metadata />
</DesignTimePermissions>
<RunTimePermissions />
<VisibilityPermissions>
<Visibility />
</VisibilityPermissions>
<ConfigurationTables/>
<ConfigurationChanges />
</DirectoryService>
<DirectoryService
className="com.thingworx.security.directoryservices.ActiveDirectoryDirectoryService"
description="Active Directory Directory Services"
documentationContent="" enabled="false" homeMashup=""
lastModifiedDate="" name="ADDS2" priority="2" projectName=""
tags="">
<Owner name="Administrator" type="User" />
<avatar />
<DesignTimePermissions>
<Create />
<Read />
<Update />
<Delete />
<Metadata />
</DesignTimePermissions>
<RunTimePermissions />
<VisibilityPermissions>
<Visibility />
</VisibilityPermissions>
<ConfigurationTables/>
<ConfigurationChanges />
</DirectoryService>
</DirectoryServices>
</Entities>
目录服务配置
导入 Active Directory 目录服务的 XML 文件后,您必须对其进行配置。要访问 ThingWorx Composer 的配置页面:
1. “浏览”导航面板中,展开“安全”,然后选择“目录服务”
2. 在“目录服务”页面上,单击 Active Directory 目录服务的名称。目录服务的“常规信息”页面随即出现。
3. 选中“已启用”复选框以启用此目录服务,然后单击“保存”
4. 选择“配置”以显示“配置”页面。您已准备好配置目录服务。
* 
本部分及随后几部分中所述的配置选项均会显示在“目录服务”实体的“配置”页面上。有关配置错误消息的帮助,请参阅 配置错误消息
通过在 User Base Distinguished Name 配置表设置中查找用户对象和该对象的密码,对用户登录 ThingWorx 时输入的凭据进行验证。在 Active Directory 实体上有两个位置可以指定域,这两个位置可以完全相互独立。在组查找过程中会使用 Domain Distinguished Name ,因此,如果您要使用组映射功能,请验证用户所在的所有组是否均属于指定的 Domain Distinguished Name 值。User Base Distinguished Name 是使用 ThingWorx 登录期间给出的用户名和密码在 Active Directory 中查找用户对象时使用的位置。
* 
配置多个目录服务对象时,请勿在 Active Directory 结构中重叠用户搜索库。
连接设置
自 v.8.3.5 起,Active Directory 配置的连接设置部分即包括选项“动态用户登录”。以下是经过修订的页面:
下表介绍了目录服务的“连接设置”。所有连接设置字段均为必填字段。
名称
说明
XML 属性名称
默认值
值示例
URI 模式
一个字符串,用于指定与 Active Directory 服务器进行通信时使用的关联协议。
protocol
LDAP
LDAP
服务器 FQDN 或 IP 地址
用于目录查询的服务器名称/地址。
server
localhost
localhost, domainserver.acme.com, 127.0.0.1
服务器网络端口
用于目录查询的服务器的端口。
端口
389
389, 369, 10389
域可分辨名称
在用户组查找过程中使用的顶级目录的可分辨名称。
不适用
DC=test, DC=acme, DC=com
动态用户登录
确定是否已启用动态用户登录。有关详细信息,请参阅下一部分。
dynamicUserLogin
复选框为空 (已禁用)。
复选框已选中。
管理者名称
具有指定域对象的管理读取权限的用户名称。此名称的值取决于“架构映射”配置表中指定的 User Id Attribute
adminPrincipal
不适用
AcmeAdmin
管理密码
连接设置配置表中指定的管理者名称的密码。
adminPassword
不适用
AcmePassword
动态用户登录
* 
当启用“动态用户登录”时,建议用户使用相同的用户名通过 ThingWorx Platform 进行身份验证。否则,由于 ThingWorx 平台的当前限制,系统将为同一用户创建多个 ThingWorx Platform 帐户。例如,假设用户使用其 displayName testuser 登录。在名为 testuser 的平台上创建一个用户帐户。但是,如果同一用户使用其通用主体名称 (UPN) 登录,在此示例中为 testuser@domain.com,则还会在平台上创建用户 testuser@domain.com
如果启用“动态用户登录”,则将忽略“管理者名称”和“管理者密码”的连接设置。登录到 ThingWorx Platform 目录的用户将通过其用户名和密码在 Active Directory 中进行身份验证。Active Directory 中当前支持的身份验证方法是使用 displayName、UPN 和 domain\samAccountName。
如果禁用“动态用户登录”,则用户登录的工作流与 ThingWorx Platform 8.3.0 到 8.3.4 中的工作流保持一致。
组映射
请确保您了解用户和组的 ThingWorx 可见性权限组织规则,以确保按预期配置映射。如果未正确分配权限,则用户可能会访问到其不应访问的内容。
虽然组映射不是必需的,但如果用户已设置或更新,那么没有组映射将会导致权限受限 (仅用户具有的默认权限)。
“组映射”配置大概位于 Active Directory 目录服务“配置”页面的中间位置。要设置组映射:
1. 在 ThingWorx Composer 中,请导航至 Composer 中的 Active Directory 目录服务 (“安全” > “目录服务” > “Active Directory 服务名称”)。
2. 打开“配置”页面,并向下滚动至“组映射”部分,然后单击“添加”,如下图所示:
3. 在“组映射”窗口的“Active Directory 组名称”字段中,键入想要映射到 ThingWorx 组的 Active Directory 组的名称。
4. 在“ThingWorx 组名称”字段中,单击加号 + 号以显示 ThingWorx 组的下拉列表,如下所示。请注意,它提供了“高级搜索”,在此您可以按特定实体及更多其他条件进行筛选。自 ThingWorx v.8.3.5 起,此下拉列表可用。
* 
禁用“动态用户登录”时,系统会显示以下 GroupMappings 表单。
5. 在下列版本的 GroupMappings 表单中,请注意启用“动态组登录”时显示的消息“登录凭据必填”。要输入“Active Directory 组名称”,请单击绿色的锁定图标。
6. “提供登录凭据”对话框显示出来后,设置 AdministrativePrincipalNameAdministrativePassword,然后单击“设置”
下表说明了组映射的设置:
组映射
名称
说明
有效值
Active Directory 组名称
在运行时关联/映射到 ThingWorx 组以进行权限/授权验证的 Active Directory 组的名称。
非空字符串,其中包含与所配置域下 Active Directory 中的 groupObjectClass 对象相对应的组名称。
ThingWorx 组名称
将包含在运行时所用 ThingWorx 权限/授权配置的 ThingWorx 组的名称。由 Active Directory 设置的用户将添加到此 ThingWorx 组。此过程基于用户所属且映射到此 ThingWorx 组的 Active Directory 组。
非空字符串,其中包含与 ThingWorx 中的组实体相对应的组名称。
使用“动态用户登录”进行组映射
对于 v.8.3.5 中增加的“动态用户登录”功能,启用“动态用户登录”时,GetDomainGroupsIsValidGroup 服务采用允许传入 Active Directory 管理用户登录凭据的自变量,例如从 UI 传入。禁用“动态用户登录”时 (默认情况下),管理用户登录凭据对于 IsValidGroupGetDomainGroups 服务是可选的。TestConnection 服务适用于所有必需的登录凭据。只要参数为空,服务即会使用管理员登录凭据。
组映射的组验证
自 v.8.3.5 起,ThingWorx Composer 在“组映射”页面上提供了一个文本框,您可在其中输入 Active Directory 组的名称。从下拉列表中选择 Active Directory 组的选项仍然可用。此文本框支持按名称或完整可分辨名称输入组。例如,名称 TestGroup 是简单名称,而 CN=TestGroup, CN=Users, DC=domain, DC=com 是完整可分辨名称。
自 v.8.3.5 起,即提供 IsValidGroup 服务,以便您能够在 Active Directory 中搜索有效组的名称。此服务采用单个 STRING 参数 groupName,用于指定您要查找的组的名称。此服务会返回 BOOLEAN 结果,指示该组是否存在于 Active Directory 中。
* 
不允许使用通配符字符 ("*") 作为 groupName 输入的一部分。
嵌套组成员资格
自 v.8.3.5 起,“将用户添加到映射的上级组”配置选项可以在 Active Directory 配置的“架构映射”部分中找到。此 BOOLEAN 设置启用或禁用嵌套组成员资格。
如果启用了嵌套组成员资格,则会发生以下情况:
使用可扩展匹配规则查询 Active Directory,以检索用户所属的组以及这些组所属的组,无论嵌套深度如何。
将这些组与“组映射”表进行比较,以将生成的 ThingWorx 用户分配到用户组。
此选项可能会对性能产生影响,因为它会增加 Active Directory 的负载,并且可能会产生较大的结果集。
如果禁用嵌套组成员资格,则工作流与 ThingWorx Platform v.8.3.0 到 8.3.4 中的工作流保持一致。
架构映射
为了能够进行身份验证和组检索/映射,本部分中的下列字段为必填字段:“用户 ID 属性名称”、“组对象类名称”、“组成员资格属性名称”、“组属性名称”、“用户标志属性名称”、“用户控制属性的禁用位”和“用户控制属性的锁定位”。
架构映射
名称
说明
XML 属性名称
默认值
值示例
用户 ID 属性名称
包含用户名称值的属性名称,用于在登录到 ThingWorx 时与指定的用户名进行匹配。
attributeUserIdName
cn
cn, userPrincipleName
用户基础可分辨名称
在用户凭据验证过程中使用的顶级目录的可分辨名称。
userBaseDN
ou=people
DC=test, DC=acme, DC=com
组对象类名称
表示对象是一个组的 objectClass 属性的值。将查询组对象并将其呈现给“组映射”配置表中的 Active Directory / ThingWorx 组映射。
groupObjectClass
group
group
用于筛选域组的组 LDAP 筛选器
允许筛选大量的域组。
* 
如果您有大量的组,则必须配置此参数,切勿留空。如果留空,则可能会影响检索大量组的性能。
groupLdapFilter
不适用
(cn=a_testgroup111*)(cn=b_testgroup222*)
组成员资格属性名称
表示用户或组是另一个组“成员”的属性名称。对于 Active Directory 中用户的每个 memberOf 条目,该用户将作为成员添加到映射至 memberOf 条目中指定 Active Directory 组的 ThingWorx 组中。
memberOfAttribute
memberOf
memberOf
组属性名称
在 ThingWorx 用户界面中用于检索组显示名称的属性名称,特别是在“组映射”配置表选择中。
* 
使用 distinguishedName 以显示 Active Directory 中组位置的完整路径。当组存在于多个域中时,这会提供其所属子域的上下文。
groupAttribute
cn
cn
用户标志属性名称
userControlAttribute
userAccountControl
userAccountControl
用户控制属性的禁用位
指定的用户标志属性名称 (即默认的 userControlAttribute) 内禁用位标志的整数/小数值。有关详细信息,请转至 https://msdn.microsoft.com/en-us/library/cc223145.aspx
userDisableBit
2
2
用户控制属性的锁定位
指定的用户标志属性名称 (即默认的 userControlAttribute) 内锁定位标志的整数/小数值。有关详细信息,请转至 https://msdn.microsoft.com/en-us/library/cc223145.aspx
userLockoutBit
16
16
森林名称标识符
用于标识域控制器的集合/森林。配置有相同字符串的每个目录服务对象均可在“组映射”配置中从彼此的域中映射组。有关使用此选项的示例,请参阅后续各个部分。
forestNameIdentifier
不适用
用户设置
用户设置提供了用于在 ThingWorx 中自动创建、修改和删除用户的选项。
名称
说明
XML 属性名称
默认值
注解
支持用户创建
如果便于登录请求的 Active Directory 服务器中用户凭据正确,则控制 ThingWorx 用户的自动创建/设置。
如果选中该字段,则将使用指定的登录用户名以及“用户默认设置”配置表中指定的任何默认值来创建用户。
如果该字段未选中/为 false (默认),则在用户尝试登录前,该用户必须存在于 ThingWorx 中。
用户必须存在于 ThingWorx 中,登录才能成功。如果用户属于“用户设置排除列表”配置表,则该字段对自动创建用户无任何影响。
userCreationEnabled
false
如果希望 ThingWorx 中的目录服务能够自动创建用户,请设置为 true
支持用户修改
如果便于登录请求的 Active Directory 服务器中用户凭据正确,则控制 ThingWorx 用户的自动更新/设置。
如果该字段被选中/为 true,则在每次尝试登录时都会更新用户。将使用“用户默认设置”配置表中指定的任何默认值对其进行更新。
如果该字段未选中/为 false (默认),则在自动创建/设置用户时,初次尝试后的每次尝试登录都不会更新用户。用户必须存在于 ThingWorx 中,登录才能成功。
如果用户属于“用户设置排除列表”配置表,则该字段对自动更新用户无任何影响。
userModificationEnabled
false
设置为 true 将允许 ThingWorx 中的目录服务更新用户。
支持用户删除
如果用户不存在于便于登录请求的 Active Directory 服务器,则控制 ThingWorx 用户的自动删除/取消设置。
如果该字段被选中/为 true,则在尝试登录时会删除用户。
如果该字段未选中/为 false,则在尝试登录时不会删除用户。用户必须存在于 ThingWorx 中,登录和删除操作才能成功。如果用户属于“用户设置排除列表”配置表,则该字段对自动删除用户无任何影响。
userDeletionEnabled
false
设置为 true 将允许 ThingWorx 中的目录服务删除用户。
用户默认设置
下表说明了用户可用的默认设置。这些字段都是可选字段。
名称
说明
XML 属性名称
有效值
注解
设置的用户默认域前缀
为了区分来自域服务器 Y 的用户 X 与来自域服务器 Z 的用户 X 而假定为用户名前缀的字符串值。
这使得已配置的 Active Directory 目录服务能够明确了解欲验证用户是否面向管理。如果使用值进行配置,则 Active Directory 目录服务将不会尝试验证或设置用户,而是会记录安全消息并将用户登录尝试传递给链中的下一个 ThingWorx 目录服务。
* 
如果同一用户存在于多个域服务器及其域中,则建议使用域前缀。这最大限度地减少了在用户验证失败时由于“水流”下降功能而可能出现的不确定行为。
userDefaultDomainPrefix
空白字符串或包含有效实体名称字符的任意字符串
如果有多个配置的域服务器,则应使用此配置。例如,NAEUR 无法用作域前缀。
* 
启用“动态用户登录”时,此设置可能会导致意外结果,因为在尝试与 Active Directory 绑定之前,会从用户身份验证时输入的用户名中去除设置的用户默认域前缀。例如,如果“设置的用户默认域前缀”设置为 "mydomain\",并且用户在使用 ThingWorx 进行身份验证时输入 "mydomain\username",则只有 "username" 会发送至 Active Directory 以进行身份验证。即使 "mydomain\username" 是用户在 Active Directory 中的 domain\samAccountName,该用户的此身份验证也可能失败
* 
如果同一用户名存在于多个 Active Directory 域中,且登录用户并非在 Active Directory 找到的实际用户,则身份验证将失败。这将基于查询的顺序。
设置的用户默认说明
设置为所有已设置用户说明的说明字符串值。这个设置非常有用,它允许向用户添加上下文信息,例如“由域服务器 Y 自动设置”。
userDefaultDescription
空字符串或任何说明字符串
如果所有已设置用户 (即自动创建/更新的用户) 的默认说明是首选的,则应使用此选项。
设置的用户默认主混搭
设置为所有已设置用户的默认混搭的主混搭名称值。此设置允许所有已设置用户在登录到 ThingWorx 时,从公用主混搭开始。这些混搭的示例包括访客主混搭、自助服务主混搭或运营商主混搭等。
userDefaultHomeMashupName
要取消设置的空字符串,或有效的现有混搭名称
如果首选所有已设置用户 (即自动创建/更新的用户) 的默认主混搭,则应使用此选项。
例如,如果所有用户在进入 ThingWorx 应用程序时首选使用相同的 GuestMashup、SelfServiceMashup 或 LandingPageMashup,此选项将非常有用。
设置的用户默认移动混搭
为移动设备上使用的所有已设置用户设置的移动混搭名称值。此设置允许所有已设置用户在登录到 ThingWorx 时,从公用移动混搭开始。这些混搭的示例包括访客移动混搭、自助服务移动混搭或运营商移动混搭等。
userDefaultMobileMashupName
要取消设置的空字符串,或有效的现有混搭名称
如果首选所有已设置用户 (即自动创建/更新的用户) 的默认移动混搭,则使用此选项。
例如,如果所有用户在进入 ThingWorx 应用程序时首选使用相同的 GuestMashup、SelfServiceMashup 或 LandingPageMashup,此选项将非常有用。
设置的用户默认标记
在所有已设置用户上设置的一组模型标记。该设置允许所有已设置用户拥有可用于搜索或上下文标识的常用标记。这些标记的示例包括运营商标记、ProvisionedByDomainServerY、ProvisionedByDomainServerZ 等。
userDefaultTags
要取消设置的空字符串,或有效的现有标记名称
如果首选所有已设置用户 (即自动创建/更新的用户) 的一组默认模型标记,则应使用此选项。
用户设置排除列表
这是一个配置表,允许 Active Directory 目录服务的管理员排除特定的 ThingWorx 用户参与 Active Directory 目录服务的用户设置功能。
用户设置功能包括用户创建、修改和删除。使用 Active Directory 目录服务配置 ThingWorx 时,现有用户可能不希望 Active Directory 管理其配置和存在;而是仅将其用于凭据验证。应将这些类型的用户添加到“用户设置排除列表”配置中。
* 
管理员用户会自动添加到此列表中,且不能被移除。
管理员用户为 ThingWorx 默认用户,因此无法创建或销毁。管理员用户也不应进行自动修改。执行此操作可能会导致登录时发生意外的配置更改。
用户登录情景
下表根据 ThingWorx 内 Active Directory 目录服务中设置的配置选项,提供了在尝试登录 ThingWorx 期间用户的登录前状态和登录后状态。
* 
下面的情景不会更改 Active Directory 服务器中的用户状态/配置。
以粗体显示的项是 ThingWorx 中用户登录后状态的主要决定因素。
AD 服务器中的用户状态
ThingWorx 中的用户登录前状态
配置选项
ThingWorx 中的用户登录后状态
不存在
不存在
任何配置
不存在
不能用于登录
不存在
存在 (由 ThingWorx 管理员手动创建)
密码已设置/驻留在 ThingWorx 中
支持用户设置创建
支持用户设置修改
支持用户设置删除
已在用户设置排除列表中列出
存在
未被修改或删除
可用于登录
不存在
存在 (由 ThingWorx 管理员手动创建)
密码未设置,或未驻留在 ThingWorx 中
支持用户设置创建
支持用户设置修改
支持用户设置删除
已在用户设置排除列表中列出
存在
未被修改或删除
不能用于登录
不存在
存在 (由 ThingWorx 管理员手动创建)
支持用户设置创建
支持用户设置修改
支持用户设置删除
未在用户设置排除列表中列出
不存在
不能用于登录
不存在
存在 (由 ThingWorx 管理员手动创建)
支持用户设置创建
支持用户设置修改
禁用用户设置删除
未在用户设置排除列表中列出
不存在
不能用于登录
存在
不存在
支持用户设置创建
支持用户设置修改
支持用户设置删除
已在用户设置排除列表中列出
不存在
不能用于登录
存在
已禁用
不存在
支持用户设置创建
支持用户设置修改
支持用户设置删除
未在用户设置排除列表中列出
不存在
不能用于登录
存在
“已锁定”
不存在
支持用户设置创建
支持用户设置修改
支持用户设置删除
未在用户设置排除列表中列出
不存在
不能用于登录
存在
不存在
禁用用户设置创建
支持用户设置修改
支持用户设置删除
未在用户设置排除列表中列出
不存在
不能用于登录
存在
不存在
支持用户设置创建
支持用户设置修改
支持用户设置删除
未在用户设置排除列表中列出
存在 (已创建)
已作为成员添加到映射组
已添加默认用户设置
可用于登录
存在
存在
支持用户设置创建
支持用户设置修改
支持用户设置删除
未在用户设置排除列表中列出
已配置用户默认设置
用户已修改
已作为成员添加到映射组/从映射组移除
已添加默认用户设置
可用于登录
存在
存在
支持用户设置创建
支持用户设置修改
支持用户设置删除
已在用户设置排除列表中列出
已配置用户默认设置
用户未修改
可用于登录
存在
“已锁定”
存在
任何配置
用户被锁定
不能用于登录
存在
已禁用
存在
任何配置
用户被禁用
不能用于登录
用户锁定情景
帐户锁定设置在 ThingWorx 的 用户管理子系统中进行配置。
锁定管理器被定义为基于锁定评估确定锁定的系统 (ThingWorx 或 Active Directory)。
下表的键是:
ThingWorx 锁定尝试配置:TLA
Active Directory 锁定尝试配置:ADL
锁定评估
锁定管理器
锁定管理器最大尝试次数的配置示例
操作
结果
TLA > ADL
ADL
2 次尝试
ThingWorx 发现用户在 Active Directory 中被锁定
ThingWorx 用户被立即锁定
TLA > ADL
ADL
2 次尝试
用户错误地登录了两次
ThingWorx 用户在两次尝试后被锁定
TLA = ADL
* 
建议的锁定配置是使 ThingWorx 与 Active Directory 匹配。
ADL
2 次尝试
用户错误地登录了两次
ThingWorx 用户在两次尝试后被锁定
TLA < ADL
ADL
2 次尝试
用户错误地登录了两次
ThingWorx 用户在两次尝试后被锁定
Active Directory 或 ThingWorx 目录服务更改
如果在域服务器中删除或更新用户,则会更新关联的 ThingWorx Active Directory 目录服务中的组映射。如果用户默认设置发生更改,则建议在 ThingWorx 中对该用户使用 CurrentSessionInfo 资源中的 TerminateUserSessions 服务。
* 
如果进行了下列其中一个配置更改,并且存在通过之前的配置创建的用户,则 Active Directory 目录服务无法将旧用户迁移到新用户。取而代之的是,将根据使用“用户 ID 属性名称”和/或域中指定的属性所设置的新值或不同值创建和管理新用户。
架构映射配置中“用户 ID 属性名称”的值为用户名。
域前缀已更改。
将用户属性从 Active Directory 映射到 ThingWorx UserExtension 属性
当新的 Active Directory 用户登录时,该用户会在 ThingWorx 中创建,并且该用户可能会自动设置,具体取决于 Create User 的 Active Directory 中的设置。下表中所述的选项允许映射属性从 Active Directory 服务器自动映射到 ThingWorx 中该用户的 UserExtension 属性表。当现有 Active Directory 用户登录时,任何修改值均会被提取到用户的 UserExtension 映射中。如果添加了新的 UserExtension 配置表行映射,该映射会将新数据提取到用户的 UserExtension 属性中。
要在 ThingWorx Composer 中设置映射:
1. 请导航至 Composer 中的 Active Directory 目录服务 (“安全” > “目录服务” > <Active Directory 服务名称>)。
2. 显示“配置”页面并向下滚动到“用户扩展属性映射配置表”部分,然后单击“添加”,如下所示:
3. 在“用户扩展属性映射”窗口的“Active Directory 属性名称”字段中,键入要自动映射到 ThingWorx 属性的 Active Directory 属性的名称。以下屏幕快照显示了用于选择 ThingWorx 属性的下拉菜单。自 ThingWorx 的 v.8.3.5 起,开始提供此下拉菜单。在此列表中选择一个值。
4. 在您做出选择并单击“添加”之后,配置表中会显示新行:
以下配置表的选项仅在 ThingWorx 8.2.1 及更高版本中可用。
属性
说明
activeDirectoryAttributeName
可映射的 Active Directory 用户属性中的属性名称。此字段可以留空,以指定从 Active Directory 同步的所有用户的默认值。
* 
如果指定了某属性,但对于 Active Directory 中的用户找不到该属性,则“应用程序日志”中将显示以下错误消息:
Attribute: <attribute_name> not found.
userExtensionPropertyName
需要映射到 Active Directory 属性的 ThingWorx 用户 UserExtension 表中的用户扩展属性的名称。
* 
如果您在“应用程序日志”中看到 userExtensionProperty 的名称无效这一错误消息,请参阅 故障排除:UserExtension 属性的名称无效
userExtensionDefaultValue
UserExtension 属性的默认值 (在 AD 服务器上未找到该属性或者该属性无效或为空时)。
映射存在于多个域中的用户和组
通过使用“森林名称标识符”选项,可将单独的 Active Directory 域中作为组成员的用户映射到 ThingWorx 中的相应组。使用任意字符串填充此字段时,会识别域控制器的集合/森林。配置有相同字符串的每个目录服务对象均可在“组映射”配置中从彼此的域中映射组。
森林名称标识符值
结果
<空白> 或空字符串
组仅在从中请求它们的特定目录服务对象中可见。
与任何其他目录服务配置不匹配的字符串
组仅在从中请求它们的特定目录服务对象中可见。
与一个或多个目录服务配置相匹配的字符串
组仅在从中请求它们的特定目录服务对象及其他具有匹配森林名称标识符的目录服务对象中可见。
示例 1:从正在请求的特定目录服务对象及其他具有匹配森林名称标识符的目录服务对象可见的组
域名称
已配置的组
森林名称标识符值
用于映射的可见组
Domain1
Group1, Group2
<空白>
Group1, Group2
Domain2
Group3, Group4
<空白>
Group3, Group4
Domain3
Group5, Group6
<空白>
Group5, Group6
示例 2:所有目录服务对象上的森林名称标识符不同
域名称
已配置的组
森林名称标识符值
用于映射的可见组
Domain1
Group1, Group2
"domainForest1"
Group1, Group2
Domain2
Group3, Group4
"DomainForest"
Group3, Group4
Domain3
Group5, Group6
"Domain Forest"
Group5, Group6
示例 3:3 个目录服务对象中有 2 个的森林名称标识符相同
域名称
已配置的组
森林名称标识符值
用于映射的可见组
Domain1
Group1, Group2
"domainForest"
Group1, Group2, Group3, Group4
Domain2
Group3, Group4
"domainForest"
Group1, Group2, Group3, Group4
Domain3
Group5, Group6
<空白>
Group5, Group6
示例 4:所有 3 个目录服务对象上的森林名称标识符不同
域名称
已配置的组
森林名称标识符值
用于映射的可见组
域 1
Group1, Group2
"domainForest"
Group1, Group2, Group3, Group4, Group5, Group6
Domain2
Group3, Group4
"domainForest"
Group1, Group2, Group3, Group4, Group5, Group6
Domain3
Group5, Group6
"domainForest"
Group1, Group2, Group3, Group4, Group5, Group6
导入验证失败
导入 Active Directory 实体时,仅当 XML 文件中指定的值与字段的数据类型不匹配时,导入才会失败。例如,如果为 <port> 元素提供了值 test,则导入会失败。此 XML 代码段显示何时会发生此问题:

<Row>
<adminPassword><![CDATA[]]></adminPassword>
<adminPrincipal><![CDATA[CN=Administrator,CN=Users,DC=domain,DC=com]]></adminPrincipal>
<domain><![CDATA[dc=domain,dc=com]]></domain>
<port>test</port> <================================ INVALID DATA TYPE VALUE FOR <port>. MUST BE AN INTEGER.
<protocol><![CDATA[LDAP]]></protocol>
<server><![CDATA[10.80.21.164]]></server>
</Row>
此屏幕快照显示您将在 Composer 中看到的内容:
以下错误会写入 ApplicationLog:

ERROR: [message: Conversion Error on Field port : Unable To Convert From com.sun.org.apache.xerces.internal.dom.ElementNSImpl to INTEGER]
ERROR: Entity import failed
导入验证成功
对于由于缺少必填字段或配置无效而导致验证失败的情况,“目录服务”实体仍可导入,但它将被标记为禁用。要启用该实体,必须更新无效字段。
* 
“目录服务”实体在启用之前不能用于身份验证。启用导入为禁用的“目录服务”实体这一过程为手动过程。您必须导航至 ThingWorx Composer 中的禁用实体,将其启用并保存。
以下是无效配置的示例,其中注释位于无效参数 (protocol) 下方:

<Row>
<adminPassword><![CDATA[]]></adminPassword>
<adminPrincipal><![CDATA[CN=Administrator,CN=Users,DC=domain,DC=com]]></adminPrincipal>
<domain><![CDATA[dc=domain,dc=com]]></domain>
<port>test</port>
<protocol><![CDATA[INVALID-PROTOCOL]]></protocol>
<== INVALID CONFIGURATION VALUE FOR <protocol>. MUST BE EITHER LDAP OR LDAPS.
<server><![CDATA[10.80.21.164]]></server>
</Row>
请注意,此实体成功导入到 ThingWorx:
但是,请注意,未选中实体自身的“已启用”复选框,这意味着该实体已被禁用。示例如下:
ApplicationLog 中会显示这种情景下发生的以下错误:

ERROR: Directory Service Error: The URI Scheme must be LDAP or LDAPS
配置错误消息
下表列出了可能会在 ApplicationLog 中出现的错误消息,这些错误消息基于 Active Directory 实体中的无效已配置字段:
配置错误消息
字段
配置部分
错误消息
URI 模式
连接设置
目录服务错误:URI 模式必须是 LDAP 或 LDAPS。
服务器 FQDN 或 IP 地址/
服务器网络端口
连接设置
目录服务错误:服务器 FQDN 或 IP 地址不能为空。
目录服务错误:java.net.MalformedURLException: Not an LDAP URL: <IP>:<Port> Cannot parse url: <IP><Port
目录服务错误:
java.net.ConnectException: Connection refused (Connection refused) to 'Server FQDN or IP address' and 'Server Network Port' <IP>:<Port>
服务器网络端口
连接设置
目录服务错误:服务器网络端口必须在 0 到 65535 范围内。
域可分辨名称
连接设置
目录服务错误:域不能为空。
管理者名称
连接设置
目录服务错误:管理者名称不能为空。
* 
如果未启用/选中“动态用户登录”,则管理者名称为必填。
管理密码
连接设置
目录服务错误:管理密码不能为空。
* 
如果未启用“动态用户登录”,则管理密码为必填。
用户 ID 属性名称
架构映射
目录服务错误:attributeUserIdName 不能为空。
用户基础可分辨名称
架构映射
目录服务错误:userBaseDN 不能为空。
组对象类名称
架构映射
目录服务错误:groupObjectClass 不能为空。
组成员资格属性名称
架构映射
目录服务错误:memberOfAttribute 不能为空。
组属性名称
架构映射
目录服务错误:groupAttribute 不能为空。
用户标志属性名称
架构映射
目录服务错误:userControlAttribute 不能为空。
用户控制属性的禁用位
架构映射
目录服务错误:userDisableBit 不能为空,且必须为整数。
用户控制属性的锁定位
架构映射
目录服务错误:userLockoutBit 不能为空,且必须为整数。
Active Directory 组名称
组映射
目录服务错误:activeDirectoryGroupName 不能为空。
ThingWorx 组名称
组映射
目录服务错误:thingworxGroupName 不能为空。
设置的用户默认主混搭
用户默认值
目录服务错误:userDefaultHomeMashupName 不能为无效混搭名称。
设置的用户默认移动混搭
用户默认值
目录服务错误:userDefaulMobileMashupName 不能为无效混搭名称。
设置的用户默认标记
用户默认值
目录服务错误:userDefaulTags 不能有无效标记。
目录服务错误:userDefaulTags 不能有无效标记名称。
ThingWorx 用户名
用户设置排除列表
目录服务错误:thingworxUserName 不能为空。
测试 Active Directory 连接
自 v.8.3.5 起,在目录服务配置页面的“连接设置”部分中,“测试连接”下的“验证”按钮可用于根据当前配置测试与 Active Directory 服务器的连接。配置的“连接设置”部分中的以下字段用于测试 Active Directory 连接:
URI 模式
服务器 FQDN 或 IP 地址
服务器网络端口
管理者名称
管理密码
“验证”按钮可用于启动 TestConnection 服务,采用了以下参数:
TestConnection 服务的参数
参数
基本类型
说明
userName
STRING
Active Directory 用户的名称。
password
STRING
Active Directory 用户的加密密码。
protocol
STRING
使用的架构 (LDAP 或 LDAPS)。
server
STRING
Active Directory 实例的主机或 IP 地址。
port
INTEGER
Active Directory 实例的端口。
连接测试的结果在 result 中返回,这是一个 INFOTABLE,其中包含以下信息:
status:(布尔型) 指示是否成功连接到 Active Directory。
message:(字符串) 提供有关测试失败原因的任何有用信息的消息。
* 
如果启用了 动态用户登录,则不使用“管理者名称”和“管理密码”,并且“验证”按钮处于隐藏状态。
故障排除:Active Directory 域前缀和动态用户登录
Active Directory 目录服务具有名为 Provisioned User's Default Domain Prefix 的配置设置,可能会干扰动态用户登录。以下是一组“用户默认值”
Provisioned User's Default Domain Prefix 设置可用于指定一个前缀,以限制“目录服务”可以对哪些用户进行身份验证。如果为同一 ThingWorx Platform 配置了多个 Active Directory 目录服务,请考虑使用此选项以防止所有目录服务尝试对同一用户进行身份验证。
但是,请注意,此前缀会从传递给 Active Directory 的用户名中去除。如果指定的前缀恰好是用户的 Active Directory 域,则用户无法登录到 Active Directory。
例如:
1. DOMAIN\ 被指定为 Provisioned User's Default Domain Prefix
2. 用户 DOMAIN\user1 尝试登录到 ThingWorx Platform。
3. DOMAIN\ 将从传递给 Active Directory 的用户名中去除,而 user1 无法登录
此问题当前不影响禁用“动态用户登录”的 Active Directory 目录服务。
要解决此问题,请遵循以下做法:
避免使用默认域前缀 (首选) - 启用了“动态用户登录”时,避免使用用户的默认域前缀设置。
请使用用户必须输入的其他前缀,或者让用户输入域前缀两次 - 可以指定通过 DOMAIN\SamAccountName 登录所需的 DOMAIN\ 前缀以外的其他前缀。例如,您可以使用前缀 PREFIX-,然后用户使用 PREFIX-DOMAIN\prefix 进行登录。
故障排除:UserExtension 属性的名称无效
将 Active Directory 属性映射到 ThingWorx UserExtension 属性时,从下拉菜单中选择 UserExtension 属性的名称。在 ThingWorx 应用程序日志中可能会出现以下错误消息:
Property name: <property_name> not found
in UserExtensions properties
此错误由以下条件引起:
为 Active Directory 目录服务导入的 XML 文件中的 userExtensionPropertyName 包含无效的名称,并且
用户所登录并通过身份验证的 Active Directory 目录服务配置了无效的 userExtensionPropertyName
如果之前手动编辑了 XML 文件,则会出现此错误。要移除无效条目,可前往 ThingWorx Composer,在“目录服务”实体的“配置”页面中的“用户扩展属性映射配置表”中进行移除。