我正在尝试将PingFederate设置为ADFS中的声明提供程序,目的是我从PF域通过ADFS联合到ADFS RP。我希望ADFS在将数据发送到RP之前将Active Directory中的属性添加到断言中。 PingFederate仅发送用户的Windows登录ID。在Claim Provider方面,我正在通过Name ID。仅仅是为了测试,我尝试添加这样的属性:
c:[Type ==“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”] => add(Type =“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress”,Value =“myemail@test.com”);
我在CP方面添加了这个,然后在我的传递规则之上,然后在我的断言中没有添加任何内容。我也在RP方面试过这个没有运气。
我想我的问题是这是否可以在ADFS中实现。最后,我希望PingFed将用户的登录ID作为名称ID发送,让ADFS在Active Directory中查找用户并将电子邮件地址添加为声明然后将断言发送到RP。至于从Active Directory添加属性,我发现这篇文章technet.microsoft.com/en-us/library/ff678048.aspx。问题是我甚至无法添加手动值。
答案 0 :(得分:0)
对于手动值,请使用以下内容:
=> issue(type = "http://contoso.com/partner", value = "Adatum");
对于查询,请使用以下内容:
使用普通LDAP规则生成loginID声明,然后
c:[Type == "http://company.com/claims/loginID", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"), query = ";email;{0}", param = c.Value);
答案 1 :(得分:0)
我想出来了。我的第一个用例是确保AD帐户存在。
基本上需要的是CP方面的3项索赔规则:
1 - 根据名称ID执行查找。我创建了一个自定义规则
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"]
=> add(store = "Active Directory", types = ("http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"), query = "sAMAccountName={0};objectSID;{1}", param = c.Value, param = "MYDOMAI\" + c.Value);
查询所需的参数是:
2 - 只需通过
传递名称ID的声明规则3 - 简单地通过
传递SID的声明规则在RP方面,我有2个声明规则来传递名称ID和SID。然后我有一个发行授权规则,以确保SID作为索赔存在。这是一个自定义规则,包含以下内容:
EXISTS([Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/primarysid"])
=> issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "PermitUsersWithClaim");
似乎错综复杂,但这就是我所拥有的。我的第二个用例是确保帐户已启用,但我不确定这是否可行,因为disabled属性存储为userAccountControl属性中的一个位。