我已经看到Windows Server 2012允许过滤或转换遍历林信任的传入和传出声明。我的目标是实现这样的转型或过滤。
我有2个域(DomainA和DomainB),每个域包含一个Windows Server 2012 R2域控制器(DCA和DCB)和一个Windows 8.1客户端(ClientA和ClientB)。
DomainA属于林A,DomainB属于林B.
这些森林:
在每个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
它不起作用。
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 规则。它不起作用。
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架构,以确保定义规则。规则转换定义如下:
CN = MS-DS-声明的转化的策略,CN =架构,CN =配置,DC = DomainA中,DC = COM
我可以看到包含 msDS-TransformationRules 属性的 AllowAllClaims 策略似乎没问题。我还检查了 ADClaimtransformlink ,这似乎也没问题。
当我尝试在ClientB(林B)上连接John(来自林A)时,不会发生任何有趣的事件。我有一些审核成功,没有错误,也没有关于声明的消息。
我尝试通过在nt!* tranform *函数上放置一个断点来调试内核。 Windbg 从不打破这些功能!
谁设法运行这项新功能?你能解释一下你是如何做到的(一步一步)吗?我的做法有什么问题?