我已设置 AD FS 声明提供程序,并且 Shibboleth SP 已成功通过其身份验证。当我登录受 Shibboleth 保护的站点时,索引会显示所有标头。我按预期接收 UPN,但无法获取要发送的其他属性,例如姓氏或 sAMAccountName。
我目前有 3 条声明规则:
规则1:
规则2:
规则 3:
从 Shibboleth SP 机器上的日志来看,sn 似乎并未作为 OID 属性发送。
如果我编辑 attribute-map.xml 并删除对 eppn 的引用,那么我会在 shibd 日志中得到以下内容:
2015-06-23 11:29:08 INFO Shibboleth.AttributeExtractor.XML [1]: skipping unmapped SAML 2.0 Attribute with Name: urn:oid:1.3.6.1.4.1.5923.1.1.1.6
shibd 日志中没有提到与上述输出类似的有关姓氏或 sn 的内容,这让我相信“转换 SN”规则写得不正确。
更新信息:
我能够通过将规则 1 从手动输入更改sn
为选择下拉选项来使姓氏正常工作surname
。我需要做什么才能使没有下拉列表可供选择的其他 AD 字段正常工作?
我正在添加诸如这样的字段streetAddress
。对于规则 1,我已手动输入了 LDAP 属性的街道地址和传出声明类型。
然后我添加了一条附加规则:
c:[Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress"]
=> issue(Type = "urn:oid:2.5.4.232", Value = c.Value, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/attributename"] = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri");
我不知道是否http://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress
正确,但值没有映射。
如何让无法从下拉列表中选择的 LDAP 属性发挥作用?
编辑2:
我忘了添加选择查看规则语言的结果(如下面 Matthieu 的要求):
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", Issuer == "AD AUTHORITY"]
=> issue(store = "Active Directory", types = ("http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname", "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname", "http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname", "streetaddress"), query = ";userPrincipalName,sn,givenName,sAMAccountName,streetaddress;{0}", param = c.Value);
似乎它只获取了streetaddress
,而所有其他值都有架构。由于没有架构,它将不符合 的转换规则,因为streetaddress
if 语句正在寻找http://schemas.xmlsoap.org/ws/2005/05/identity/claims/streetaddress
。对于未从下拉列表中选择的值,我应该做什么?
我想到了:
我将转换规则更改为以下内容:
c:[Type == "streetaddress"]
=> issue(Type = "urn:oid:2.5.4.232", Value = c.Value, Properties["http://schemas.xmlsoap.org/ws/2005/05/identity/claimproperties/attributename"] = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri");
我没有寻找 Type == A 模式,而是直接输入了街道地址。然后在 Shibboleth SP 中,我更改了 Attribute-map.xml 以添加以下内容:
<Attribute name="urn:oid:2.5.4.232" id="streetaddress"/>
上面的 OID 是任意的。
答案1
要检查“转换 SN”规则是否按预期工作,请安装Fiddler.然后安装这位督察因此读取 SAML 消息更加容易。
使用这些工具,您将能够看到从 ADFS 服务器发送到 Shibboleth SP 的内容。然后您将知道哪一侧的配置有错误。
编辑:在屏幕 #1 的窗口底部,单击“查看规则语言”按钮时您会看到什么?您是否在右侧的“传出声明类型”框中手动输入了“sn”?
修改 2:您在框中输入的内容正是用作声明类型的内容。如果您输入“foo”,那么您的声明类型就是“foo”。如果您想要“http://foo“那么你必须输入”http://foo“。如果您需要较长的声明类型,则无需在框中输入所有内容,而是创建一个新的声明描述(导航左侧的树,“AD FS”->“服务”->“声明描述”)。这会在下拉列表中创建一个新选项,使用起来更简单。