ADFS 自定义声明规则电子邮件到小写 SAML 响应
ADFS Custom Claim Rule email To LowerCase SAML Response
我正在尝试在 adfs 中创建自定义声明规则,以将电子邮件地址重写为 NameId,但为小写。
原因是 Responsys 读取声明并且在比较 SAML 响应中的 NameId 时区分大小写,但它失败了。我们的 Active Directory 的电子邮件地址对于某些用户是大小写混合的,而对于其他用户则是小写的。例如LJeary@ 或 ljeary@
我添加了一个自定义属性存储来完成小写部分,但我没有在 SAMLResponse 中看到声明。
根据http://macintheoffice.com/?q=node/5
我需要帮助来创建一个自定义声明规则,该规则将在传出声明 NameID 中以小写形式成功发送电子邮件地址
应该看到这个
<Subject>
<NameID>ljeary@abc.com</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData NotOnOrAfter="2017-05-10T03:24:20.358Z" Recipient="https://interact2.responsys.net/authentication/login/loginSSO" />
</SubjectConfirmation>
</Subject>
但是看到这个
<Subject>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData NotOnOrAfter="2017-05-10T03:24:20.358Z" Recipient="https://interact2.responsys.net/authentication/login/loginSSO" />
</SubjectConfirmation>
</Subject>
缺少 NameID 属性。
使用的自定义声明规则是
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]
=> issue(store = "StringProcessing", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"), query = "toLower", param = c.Value);
回答:
谢谢@nzpcmad。通过返回电子邮件地址并存储在传入索赔中,提出了类似的过程。然后创建另一个规则,将电子邮件传入声明转换为较低并分配给传出声明 NameID。
ADFS Claim Rules
您确定从自定义属性存储中返回了某些内容吗?
错误可能是因为缺少 NameID 格式。
尝试返回一个虚拟声明,例如http://company/temp 其中包含小写的电子邮件,然后使用转换规则将虚拟声明转换为 NameID。
你也可以code this yourself.
或者如果你喜欢 typing :-)
正如@nzpcmad 所建议的,您可以通过发出临时声明,然后使用 RegExReplace
将其转换为小写来实现。虽然不够优雅,但它确实产生了一个不需要在 AD FS 服务器上安装的解决方案。
UPN 以小写形式自定义声明的示例:
规则 1:
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> add(store = "Active Directory", types = ("urn:temp_upn"), query = ";userPrincipalName;{0}", param = c.Value);
规则 2:
c:[Type == "urn:temp_upn"]
=> issue(Type = "https://aws.amazon.com/SAML/Attributes/RoleSessionName", Value = RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(c.Value, "A", "a"), "B", "b"), "C", "c"), "D", "d"), "E", "e"), "F", "f"), "G", "g"), "H", "h"), "I", "i"), "J", "j"), "K", "k"), "L", "l"), "M", "m"), "N", "n"), "O", "o"), "P", "p"), "Q", "q"), "R", "r"), "S", "s"), "T", "t"), "U", "u"), "V", "v"), "W", "w"), "X", "x"), "Y", "y"), "Z", "z"));
我正在尝试在 adfs 中创建自定义声明规则,以将电子邮件地址重写为 NameId,但为小写。
原因是 Responsys 读取声明并且在比较 SAML 响应中的 NameId 时区分大小写,但它失败了。我们的 Active Directory 的电子邮件地址对于某些用户是大小写混合的,而对于其他用户则是小写的。例如LJeary@ 或 ljeary@
我添加了一个自定义属性存储来完成小写部分,但我没有在 SAMLResponse 中看到声明。
根据http://macintheoffice.com/?q=node/5
我需要帮助来创建一个自定义声明规则,该规则将在传出声明 NameID 中以小写形式成功发送电子邮件地址
应该看到这个
<Subject>
<NameID>ljeary@abc.com</NameID>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData NotOnOrAfter="2017-05-10T03:24:20.358Z" Recipient="https://interact2.responsys.net/authentication/login/loginSSO" />
</SubjectConfirmation>
</Subject>
但是看到这个
<Subject>
<SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
<SubjectConfirmationData NotOnOrAfter="2017-05-10T03:24:20.358Z" Recipient="https://interact2.responsys.net/authentication/login/loginSSO" />
</SubjectConfirmation>
</Subject>
缺少 NameID 属性。
使用的自定义声明规则是
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress"]
=> issue(store = "StringProcessing", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier"), query = "toLower", param = c.Value);
回答: 谢谢@nzpcmad。通过返回电子邮件地址并存储在传入索赔中,提出了类似的过程。然后创建另一个规则,将电子邮件传入声明转换为较低并分配给传出声明 NameID。
ADFS Claim Rules
您确定从自定义属性存储中返回了某些内容吗?
错误可能是因为缺少 NameID 格式。
尝试返回一个虚拟声明,例如http://company/temp 其中包含小写的电子邮件,然后使用转换规则将虚拟声明转换为 NameID。
你也可以code this yourself.
或者如果你喜欢 typing :-)
正如@nzpcmad 所建议的,您可以通过发出临时声明,然后使用 RegExReplace
将其转换为小写来实现。虽然不够优雅,但它确实产生了一个不需要在 AD FS 服务器上安装的解决方案。
UPN 以小写形式自定义声明的示例:
规则 1:
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> add(store = "Active Directory", types = ("urn:temp_upn"), query = ";userPrincipalName;{0}", param = c.Value);
规则 2:
c:[Type == "urn:temp_upn"]
=> issue(Type = "https://aws.amazon.com/SAML/Attributes/RoleSessionName", Value = RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(RegExReplace(c.Value, "A", "a"), "B", "b"), "C", "c"), "D", "d"), "E", "e"), "F", "f"), "G", "g"), "H", "h"), "I", "i"), "J", "j"), "K", "k"), "L", "l"), "M", "m"), "N", "n"), "O", "o"), "P", "p"), "Q", "q"), "R", "r"), "S", "s"), "T", "t"), "U", "u"), "V", "v"), "W", "w"), "X", "x"), "Y", "y"), "Z", "z"));