Identityserver4 无法使用自定义ADFS声明规则覆盖名称ID/NameIdentifier
我已使用外部ADFS登录设置IdentityServer4。要将ADFS用户与IdentityServer4用户匹配,我需要AD中的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
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声明。