我已经在 ADFS 中配置了 Claims Provider Trust 并且我只Email
进入NameID
. 我无法更改第三方声明提供商信任,因此我必须WindowsAccountName
使用我从第三方 IDP 以 NameID 收到的电子邮件地址,并将其转发到 Outlook Web Access(本地)。
我发现当我使用以下声明规则时,登录有效,但前提是用户的 UPN 和电子邮件地址匹配。如果它们之间存在差异(例如 sAMAccountName=jdoe;[email protected];[email protected] ),转发到 Exchange 的值会导致引发错误。
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier", Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format"] == "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"]
=> issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer = "AD AUTHORITY", OriginalIssuer = c.OriginalIssuer, Value = regexreplace(c.Value, "(?<user>[^\@]+)\@(.+)", "contoso\${user}"), ValueType = c.ValueType);
我如何通过他们的电子邮件地址查找用户,并返回他们WindowsAccountName
的domain\username
格式?
如果有人遇到这个问题。你需要两条规则。
规则 #1:sAMAccountName 到 temp 这告诉 ADFS 在 ActiveDirectory 中查找并返回 UPN 或电子邮件地址匹配的任何帐户。然后该规则将值存储到一个临时变量中,我们将在下一个规则中使用该变量。
注意。
contoso\adfs_service_account
很重要。ADFS 需要它来自动发现域控制器。使用任何 AD 帐户,只要它是真实帐户即可。规则#2:临时到WindowsAccountName 上面的规则只返回sAMAccountName,而不是域。就我而言,我只有一个域。因此,我在下面对其进行了硬编码。