首页 > 解决方案 > 在 WSO2 IS 中的 JIT 供应期间,如何使用 SAML 响应中给出的声明来填充用户属性?

问题描述

我在 WSO2IS 5.7.0 中有一个身份提供者 (A) 设置,它使用外部 SAML2 IdP 作为联合身份验证器。我还将身份提供者 A 配置为对主要用户存储使用 JIT 供应。

有一系列服务提供者在入站身份验证配置中使用 OpenId Connect,在本地和出站身份验证配置中使用身份提供者 A。

当我尝试使用其中一个服务提供商登录时,一切都按预期进行,并在用户存储中创建了一个用户,其用户名和名字对应于 oasis:names:tc:SAML:2.0:nameid-format 的值:来自外部 IdP 的 SAML 响应的持久 NameIdentifier。问题是用户的所有其他属性都是空白的。

我想要的是让用户使用 SAML 响应中存在的 SAML 属性(声明)的值来配置名字/姓氏、出生日期、电子邮件地址等。

我已尝试在身份提供者 A 的高级声明配置的预置声明过滤器部分中添加要使用的声明,假设映射到属性的声明将填充这些属性。但是,这只会存储我为默认值输入的任何内容。

我已将外部 IdP 配置为返回使用 wso2.org/claims 命名空间的声明,认为这会有所帮助,但没有运气。

这是我第一次尝试配置和使用 WSO2,因此将不胜感激。

编辑

这是在流程进入流程的 oauth 授权和同意部分之前从我的 WSO2 服务器的 commonauth 返回的 SAML 响应的示例:

<t:RequestSecurityTokenResponse xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust">
<t:Lifetime>
    <wsu:Created xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2019-02-26T15:30:56.820Z</wsu:Created>
    <wsu:Expires xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2019-02-26T16:30:56.820Z</wsu:Expires>
</t:Lifetime>
<wsp:AppliesTo xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
    <wsa:EndpointReference xmlns:wsa="http://www.w3.org/2005/08/addressing">
        <wsa:Address>|endpointAddress|></wsa:Address>
    </wsa:EndpointReference>
</wsp:AppliesTo>
<t:RequestedSecurityToken>
    <saml:Assertion MajorVersion="1" MinorVersion="1" AssertionID="_|guid|" Issuer="|issuer address|" IssueInstant="2019-02-26T15:30:56.820Z" xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion">
        <saml:Conditions NotBefore="2019-02-26T15:30:56.820Z" NotOnOrAfter="2019-02-26T16:30:56.820Z">
            <saml:AudienceRestrictionCondition>
                <saml:Audience>|audienceAddress|</saml:Audience>
            </saml:AudienceRestrictionCondition>
        </saml:Conditions>
        <saml:AttributeStatement>
            <saml:Subject>
                <saml:NameIdentifier Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="ISSUERNAME">67c3a3e0c379ee2341e9ce3ac58dfcff9a01284eaf7a362caa68e9ea7fac64</saml:NameIdentifier>
                <saml:SubjectConfirmation>
                    <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod>
                </saml:SubjectConfirmation>
            </saml:Subject>
            <saml:Attribute AttributeName="emailaddress" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>sample@email.address</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="dob" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>1980-01-01</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="gender" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>1</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="identityLOA" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>http://cyber-auth.gc.ca/assurance/loa1</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="postalcode" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>T1T 1T1</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="country" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>CA</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="region" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>CA-AB</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="locality" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>Edmonton</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="addresses" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>123 My Street</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="lastname" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>Mitten</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="givenname" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>Craig</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="x-ms-client-user-agent" AttributeNamespace="http://schemas.microsoft.com/2012/01/requestcontext/claims" a:OriginalIssuer="CLIENT CONTEXT" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="x-ms-endpoint-absolute-path" AttributeNamespace="http://schemas.microsoft.com/2012/01/requestcontext/claims" a:OriginalIssuer="CLIENT CONTEXT" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>/adfs/ls/</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="insidecorporatenetwork" AttributeNamespace="http://schemas.microsoft.com/ws/2012/01" a:OriginalIssuer="CLIENT CONTEXT" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue b:type="tn:boolean" xmlns:tn="http://www.w3.org/2001/XMLSchema" xmlns:b="http://www.w3.org/2001/XMLSchema-instance">true</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="client-request-id" AttributeNamespace="http://schemas.microsoft.com/2012/01/requestcontext/claims" a:OriginalIssuer="CLIENT CONTEXT" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>e629313b-3de0-0000-0000-000000000000</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="relyingpartytrustid" AttributeNamespace="http://schemas.microsoft.com/2012/01/requestcontext/claims" a:OriginalIssuer="CLIENT CONTEXT" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>https://|wsoaddress|/commonauth</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="x-ms-client-ip" AttributeNamespace="http://schemas.microsoft.com/2012/01/requestcontext/claims" a:OriginalIssuer="CLIENT CONTEXT" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>|clientIP|</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="userip" AttributeNamespace="http://schemas.microsoft.com/2014/09/requestcontext/claims" a:OriginalIssuer="CLIENT CONTEXT" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>|userIP|</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="anchorclaimtype" AttributeNamespace="http://schemas.microsoft.com/ws/2014/01/identity/claims">
                <saml:AttributeValue>http://schemas.microsoft.com/ws/2014/01/unknown</saml:AttributeValue>
            </saml:Attribute>
        </saml:AttributeStatement>
        <saml:AuthenticationStatement AuthenticationMethod="urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport" AuthenticationInstant="2019-02-26T15:30:56.000Z">
            <saml:Subject>
                <saml:NameIdentifier Format="urn:oasis:names:tc:SAML:2.0:nameid-format:persistent" NameQualifier="ISSUERNAME">67c3a3e0c379ee2341e9ce3ac58dfcff9a01284eaf7a362caa68e9ea7fac64</saml:NameIdentifier>
                <saml:SubjectConfirmation>
                    <saml:ConfirmationMethod>urn:oasis:names:tc:SAML:1.0:cm:bearer</saml:ConfirmationMethod>
                </saml:SubjectConfirmation>
            </saml:Subject>
        </saml:AuthenticationStatement>
        <ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:SignedInfo>
                <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                <ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256" />
                <ds:Reference URI="#_|guid|">
                    <ds:Transforms>
                        <ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" />
                        <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" />
                    </ds:Transforms>
                    <ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256" />
                    <ds:DigestValue>|digest value|</ds:DigestValue>
                </ds:Reference>
            </ds:SignedInfo>
            <ds:SignatureValue>|signatureValue|</ds:SignatureValue>
            <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                <X509Data>
                    <X509Certificate>|X509Certificate|</X509Certificate>
                </X509Data>
            </KeyInfo>
        </ds:Signature>
    </saml:Assertion>
</t:RequestedSecurityToken>
<t:TokenType>urn:oasis:names:tc:SAML:1.0:assertion</t:TokenType>
<t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType>
<t:KeyType>http://schemas.xmlsoap.org/ws/2005/05/identity/NoProofKey</t:KeyType>

编辑 2

以下是我的身份提供者声明设置、我的服务提供者声明设置和我的用户配置文件配置后的屏幕。在我的身份提供者声明中,我尝试过没有高级声明设置,并且图片中显示的设置结果没有差异。

身份提供者声明设置

服务提供商声明设置

用户资料

编辑 3 所以我在配置期间进入了调试器,由于某种原因,我只有两个声明,即使 SAML 响应有近 20 个。配置时的可用声明

标签: wso2wso2is

解决方案


查看 SAML 响应的 AttributeStatement。

<saml:Attribute AttributeName="emailaddress" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>sample@email.address</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="dob" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>1980-01-01</saml:AttributeValue>
            </saml:Attribute>
            <saml:Attribute AttributeName="gender" AttributeNamespace="http://wso2.org/claims" a:OriginalIssuer="ISSUERNAME" xmlns:a="http://schemas.xmlsoap.org/ws/2009/09/identity/claims">
                <saml:AttributeValue>1</saml:AttributeValue>
            </saml:Attribute>

检查 AttributeName 电子邮件地址、出生日期、性别。基于 AttributeName 进行身份提供者-A 声明配置,如下所示。

在此处输入图像描述

之后,服务提供商声明配置如下

在此处输入图像描述


推荐阅读