wso2 - 在 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 个。配置时的可用声明
解决方案
查看 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 声明配置,如下所示。
之后,服务提供商声明配置如下
推荐阅读
- matlab - 如何从土耳其地图的文本文件数据创建动画电影或 gif?
- python-3.x - findspark.init() 列表索引超出范围错误
- image - 如何区分噪声和图像的实际变化?
- python - 具有重复值的枢轴数据框
- typescript - 仅返回 1 | 0 | -1 | 2 在一个函数中 - TypeScript
- python - 散景绘图“超出范围的浮点值不符合 JSON”问题
- java - 当消息由于队列大小而被拒绝时,RabbitMQ 不会发送失败
- excel - 自动增量不会自动填充链接号
- sql - 将源表中的列中的数据添加到目标表中的新列
- c# - 在 C# 中连接到 Udp 服务器的客户端列表