首页 文章

ADFS中的自定义声明规则

提问于
浏览
0

我们在ADFS中有一个声明规则,以便将用户的电子邮件地址作为NameID发送: -

c:[Type ==“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress "] => issue(Type = " http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier ", Issuer = c.Issuer, OriginalIssuer = c.OriginalIssuer, Value = c.Value, ValueType = c.ValueType, Properties[" http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/format "] = " urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress”);

但是我们需要能够在发送此信息之前检查我们从AD读取的电子邮件地址,如果SMTP域是外部SMTP域,例如@ Microsoft.com,我们需要将发送的值更改为UPN用户,而不是该用户的电子邮件 .

这甚至可能吗?

1 回答

  • 0

    不是完整的答案,但方法如下

    • 首先通过RegExMatch检查,使用'add'(而不是'issue')生成临时声明 .

    • 接下来使用EXISTS指令检查上述临时声明类型是否包含电子邮件地址的'&&'子句并且问题如上所述为nameID执行问题

    • 接下来使用NOT EXISTS指令检查上述临时声明类型和'&&'与UPN声明类型并发出UPN作为nameID

    这假设您在输入工作集中同时具有两种声明类型 . 这就是你需要'&&'指令的原因 . 如果没有,更简单的方法是直接读取Active Directory以解决该问题 . 在这种情况下,您不需要'&&' .

    https://social.technet.microsoft.com/wiki/contents/articles/4792.understanding-claim-rule-language-in-ad-fs-2-0-higher.aspx是一篇很棒的文章,可以使用声明规则语言进行更复杂的转换 .

    谢谢// Sam(@MrADFS)

相关问题