ADFS中的自定义声明规则

时间:2018-05-17 15:18:52

标签: saml adfs

我们在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 [" {{ 3}}"] =" urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress");

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

这甚至可能吗?

1 个答案:

答案 0 :(得分: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)