配置 ADFS 以传递 SID 作为声明

配置 ADFS 以传递 SID 作为声明

我有一个系统,我们使用 ADFS 作为身份提供者,为基于 WIF 的 .NET 应用程序提供单点登录。一切运行良好,我们能够根据需要传递所有声明,例如,以下是传递姓氏的规则:

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", 
Issuer == "AD AUTHORITY"]  
=> issue(store = "Active Directory", 
types = ("http://example.com/identity/claims/portal/lastname"), 
query = ";sn;{0}", param = c.Value);

但是现在,我需要添加两条规则,但遇到了麻烦,第一条是传递 SID,另一条是传递 SAM 帐户名(域\用户)。它们不存在于 ADFS 声明配置向导中的预定义列表中,我试图为它们编写自定义规则,但无法使它们正常工作。

如果确实可能的话,您能否指出我该如何提取这些属性?

如果我搞乱了一些术语,我深感抱歉,我通常只会在别无选择的情况下才涉足 AD 的代码方面工作:)欢迎所有更正。

答案1

传递 objectguid 而不是 SID 来获取 AD 对象真正不可变的 ID。

类似于:

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
  => issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"), query = ";objectGUID;{0}", param = c.Value);

答案2

好的,我设法找到了答案,页面。我基本上使用了错误的属性名称,在我的情况下我应该使用objectSidsAMAccountName。令我惊讶的是后者也没有域部分。因此,如果它可以帮助其他人,以下是将 SID 作为声明传递的示例规则:

c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", 
Issuer == "AD AUTHORITY"]  
=> issue(store = "Active Directory", 
types = ("http://example.com/identity/claims/portal/lastname"), 
query = ";objectSid;{0}", param = c.Value);

相关内容