Identityserver4 无法使用自定义ADFS声明规则覆盖名称ID/NameIdentifier

Identityserver4 无法使用自定义ADFS声明规则覆盖名称ID/NameIdentifier,identityserver4,openid,adfs,claims,Identityserver4,Openid,Adfs,Claims,我已使用外部ADFS登录设置IdentityServer4。要将ADFS用户与IdentityServer4用户匹配,我需要AD中的EmployeeNumber属性。我添加了一个索赔规则(AD FS->Application Group->Web API->Issuation Transform Rules),该规则从AD中查询EmployeeNumber,并将其转发到名称ID/名称标识符: c:[Type == "http://schemas.microsoft.com/ws/200

我已使用外部ADFS登录设置IdentityServer4。要将ADFS用户与IdentityServer4用户匹配,我需要AD中的
EmployeeNumber
属性。我添加了一个索赔规则(AD FS->Application Group->Web API->Issuation Transform Rules),该规则从AD中查询
EmployeeNumber
,并将其转发到
名称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 = ";employeeNumber;{0}", param = c.Value);
EmployeeNumber是一个数字字符串。但无论我是否添加此规则,我总是得到一个似乎是GUID的
nameidentifier

我已经设置了另一个规则——与上面的规则基本相同——但它将EmployeeNumber传递给
备用登录ID
。现在,我将EmployeeNumber作为
alternateloginid
。这将是一个解决办法。(IdentityServer的代码示例使用主题名称标识符从外部登录提供商识别用户。)

目前我们仍在使用IdentityServer3。我已经通过WS-Fed设置了ADFS登录。在这里,我在AD FS->依赖方信托->编辑索赔发放策略下使用与上面相同的规则。在那里,它按预期工作。另外有趣的是,我在新设置(IdentityServer4/AD FS应用程序组)中获得了更多的声明。也许这与AD FS->Claims Provider Trusts下的规则有关。有两条“通关所有…”规则。我目前不知道默认情况下它们是否在这里,或者是否有其他人为其他ADFS客户端设置了它们


有没有办法用
员工编号
覆盖
名称标识符
声明?或者我应该使用另一个索赔?如果是,最好使用哪种索赔?谢谢大家!

对于NameID,我通常使用转换规则


将EmployeeNumber转换为NameID并选择格式。

谢谢!我尝试了此选项和其他选项,但
NameID
/
nameidentifier
始终作为GUID提供。我怀疑idsrv就是这样发送它的。NameID是一个SAML属性,idsrv使用OpenID连接。我认为ADFS服务器正在发送此消息,idsrv会像从外部登录提供程序接收其他声明一样接收此消息。现在,我使用
alternateloginid
的变通方法,并使用此声明匹配用户。很高兴看到您对其进行了排序。是的,如果您有正确的索赔规则,ADFS会发送它。我想知道idsrv对它做了什么,因为它不是一个正常的OIDC声明。