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

时间:2014-05-26 11:37:26

标签: windows powershell active-directory windows-server-2012 claims-based-identity

简介

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

建筑

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

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

这些森林:

  • 通过一个双向信任连接,
  • 将域设置为域功能级别" Windows Server 2012"。

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

架构测试

首先,我想确保声明功能正常。为此,我创建了一个声明" country"在我的DCA上使用PowerShell(根据claim specifications)。

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

然后我使用非管理员帐户(John)登录我的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上做了同样的事情,我使用非管理员帐户(Alex)登录我的ClientB,然后检查她的声明。

PS C:\Users\Alex> whoami /claims

USER CLAIMS INFORMATION
-----------------------

Claim Name       Claim ID                                 Flags Type   Values
================ ======================================== ===== ====== ======
"country"        ad://ext/Country:mycompany                     String "EN"  

好的,我认为声称在我的两个森林中起作用了。下一步是允许约翰在森林B中的主张。

设置声明转换

正如我的主张"国家"在林A和B中具有相同的名称,我不需要执行转换。我只需要允许从森林A到森林B的任何索赔(根据this msdn example)。

所以,我在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 `

一切准备就绪,只是为了测试。我在ClientB上连接John(来自森林A)(在森林B上)。连接正常(感谢两个林之间的双向信任)。然后我检查他的索赔。

PS C:\Users\John> whoami /claims

USER CLAIMS INFORMATION
-----------------------

User claims unknown.

看来转型政策不起作用...... :(。

尝试其他值

我的声明转换规则可能有误......

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

拒绝所有国家/地区

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

它不起作用。

允许所有人使用transformation rules language

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 Directory管理中心,动态访问控制)创建了声明。

我在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上再次应用 -AllowAll 规则。它不起作用。

允许所有人使用transformation rules language

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");'

它不起作用。

调试

Active Directory架构

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

  

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

我可以看到包含 msDS-TransformationRules 属性的 AllowAllClaims 策略似乎没问题。我还检查了 ADClaimtransformlink ,这似乎也没问题。

Windows事件日志

当我尝试在ClientB(林B)上连接John(来自林A)时,不会发生任何有趣的事件。我有一些审核成功,没有错误,也没有关于声明的消息。

的WinDBG

我尝试通过在nt!* tranform *函数上放置一个断点来调试内核。 Windbg 从不打破这些功能!

问题

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

0 个答案:

没有答案