首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向LowerCase SAML响应发送ADFS自定义声明规则电子邮件

向LowerCase SAML响应发送ADFS自定义声明规则电子邮件
EN

Stack Overflow用户
提问于 2017-05-10 03:25:20
回答 2查看 5.2K关注 0票数 1

我正试图在adfs中创建一个自定义声明规则,以便将电子邮件地址重写到NameId,但以小写形式。

原因是Responsys读取声明,并且在比较SAML响应中的NameId时区分大小写,它失败了。我们的Active Directory为一些用户提供了混合大小写的电子邮件地址,而对于其他用户则采用小写。例如ljeary或ljeary

我添加了一个自定义属性存储来执行小写部分,但是我没有在SAMLResponse中看到声明。

根据http://macintheoffice.com/?q=node/5

我需要帮助创建一个自定义索赔规则,它将成功地将电子邮件地址作为小写在传出的NameID中发送。

应该看到这个

代码语言:javascript
复制
   <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>

但看看这个

代码语言:javascript
复制
    <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属性。

使用的自定义索赔规则是

代码语言:javascript
复制
    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索赔规则

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-11 02:32:59

您确定正在从自定义属性存储中返回某些内容吗?

错误可能是由于缺少NameID格式。

尝试返回一个虚拟索赔,例如包含小写电子邮件的http://company/temp,然后使用转换规则将虚拟声明转换为NameID。

你也可以你自己编码这个

或者如果你喜欢打字 :-)

票数 1
EN

Stack Overflow用户

发布于 2019-08-26 22:36:56

正如@nzpcmad建议的那样,您可以通过发出临时声明,然后使用RegExReplace将其转换为小写。虽然不优雅,但它确实导致了一个不需要在AD服务器上安装的解决方案。

使用UPN作为小写使用自定义声明的示例:

规则1:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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"));
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43883107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档