如何使用“转换声明策略”跨林部署Windows声明?

介绍

我已经看到,Windows Server 2012允许过滤或转换传入和传出声明,遍历森林信任。 我的目标是实现这样一个转换或过滤。

build筑

我有2个域(DomainA和DomainB),每个域包含Windows Server 2012 R2域控制器(DCA和DCB)和Windows 8.1客户端(ClientA和ClientB)。

DomainA属于森林A,DomainB属于森林B.

这些森林:

  • 由一个双向信任连接,
  • 将域设置为域function级别“Windows Server 2012”。

在每个DC和客户端上,通过组策略启用索赔。

体系结构的testing

首先,我想确保索赔function。 为此,我使用PowerShell在DCA上创build了声明“国家/地区”(根据声明规范 )。

New-ADClaimType ` -AppliesToClasses:@('user') ` -Description:"User country" ` -DisplayName:"Country" ` -ID:"ad://ext/Country:mycompany" ` -IsSingleValued:$true ` -Server:"DomainA.com" ` -SourceAttribute:Country-Name 

然后我用非pipe理员帐户(John)login我的ClientA,然后检查他的索赔。

 PS C:\Users\John> whoami /claims USER CLAIMS INFORMATION ----------------------- Claim Name Claim ID Flags Type Values ================ ======================================== ===== ====== ====== "country" ad://ext/Country:mycompany String "US" 

一切都好。 酷!

我在DCB上也做过同样的事情,我用一个非pipe理员帐户(Alex)login我的ClientB,然后检查她的索赔。

 PS C:\Users\Alex> whoami /claims USER CLAIMS INFORMATION ----------------------- Claim Name Claim ID Flags Type Values ================ ======================================== ===== ====== ====== "country" ad://ext/Country:mycompany String "EN" 

好吧,我认为这些说法在我的两个森林中是有用的。 下一步就是允许约翰在森林里宣称

设置声明转换

由于我的“国家”在森林A和B中的名称相同,所以我不需要执行转换。 我只需要允许从Forest A到Forest B的任何声明(根据此msdn示例 )。

所以,我在DCA上应用这些命令行:

 New-ADClaimTransformPolicy ` -Description "Claims transformation policy to allow all claims" ` -Name "AllowAllClaims" ` -AllowAll ` Set-ADClaimtransformlink "DomainA.com" ` -Policy AllowAllClaims ` -Trustrole Trusted ` Set-ADClaimtransformlink "DomainA.com" ` -Policy AllowAllClaims ` -Trustrole Trusting ` 

我在DCB上也是这样做的:

 New-ADClaimTransformPolicy ` -Description "Claims transformation policy to allow all claims" ` -Name "AllowAllClaims" ` -AllowAll ` Set-ADClaimtransformlink "DomainB.com" ` -Policy AllowAllClaims ` -Trustrole Trusted ` Set-ADClaimtransformlink "DomainB.com" ` -Policy AllowAllClaims ` -Trustrole Trusting ` 

一切都准备好了,只有testing。 我在ClientB(在B上)连接John(来自森林A)。 连接是好的(感谢两个森林之间的双向信任)。 然后我检查他的索赔。

 PS C:\Users\John> whoami /claims USER CLAIMS INFORMATION ----------------------- User claims unknown. 

看来,转型政策没有工作… :(。

尝试其他的价值

我的声明转换规则可能是错误的…

…所以我按照下面的规则做了同样的练习:

否认所有国家除外

 New-ADClaimTransformPolicy ` -Name "DenyAllExceptCountry" ` -DenyAllExcept ad://ext/Country:mycompany 

它不起作用。

允许所有与转换规则的语言

 New-ADClaimTransformPolicy ` -Name "CountryPolicy" ` -Rule 'C1:[Type=="ad://ext/Country:mycompany", Value=="US", ValueType=="string"] =>issue(Type="ad://ext/Country:mycompany", Value="US", ValueType="string");' 

它不起作用。

我的索赔名称可能是错的

…所以我从GUI(Active Directorypipe理中心,dynamic访问控制)创build了声明。

我在我的ClientA(森林A)上获得了这个声明:

 PS C:\Users\John> whoami /claims USER CLAIMS INFORMATION ----------------------- Claim Name Claim ID Flags Type Values ================ ======================================== ===== ====== ====== "country" ad://ext/country:88d143124c753e5b String "US" 

我在我的ClientB(森林B)上获得这个声明:

 PS C:\Users\Alex> whoami /claims USER CLAIMS INFORMATION ----------------------- Claim Name Claim ID Flags Type Values ================ ======================================== ===== ====== ====== "country" ad://ext/country:65e654230a985c3b String "EN" 

允许所有规则

我申请 – 全部再次规则两个DC。 它不起作用。

允许所有与转换规则的语言

 New-ADClaimTransformPolicy ` -Name "CountryPolicy" ` -Rule 'C1:[Type=="ad://ext/country:88d143124c753e5b", Value=="US", ValueType=="string"] =>issue(Type="ad://ext/country:65e654230a985c3b", Value="US", ValueType="string");' 

它不起作用。

debugging

Active Directory架构

我试图看看Active Directory架构,以确保规则的定义。 规则转换定义如下:

CN = MS-DS-声明的转化的策略,CN =架构,CN =configuration,DC = DomainA中,DC = COM

我可以看到我的AllowAllClaims策略,它包含一个msDS-TransformationRules属性,看起来没问题。 我也检查ADClaimtransformlink ,似乎也没关系。

Windows事件日志

当我尝试连接ClientB(森林B)上的John(来自森林A)时,没有发生有趣的事件。 我有一些审计成功 ,没有错误,没有关于索赔的信息。

WinDBG的

我试图通过在nt!* tranform *函数上放置一个断点来debugging内核。 Windbg 从来没有打破这些function!

问题

谁设法运行这个新function? 你能解释一下你是如何做的(一步一步的)? 我的方法有什么问题?

Solutions Collecting From Web of "如何使用“转换声明策略”跨林部署Windows声明?"