在尝试了 SimpleSAML 邮件列表、检查文档并花费大量时间阅读 SimpleSAML 源代码之后,我在这里问这个问题,我希望这里的某个人能够帮助阐明一些问题。
我对 SimplesSAML 还是有点陌生,请多多包涵——我完全有可能对 SAML 或库产生了一些根本性的误解。
在定义发送给依赖服务提供商的元数据时,您如何控制要xsi:type
包含attributeValue
的属性?
例如,假设我需要在现有的 Attribute 语句中生成这样的 xml 以被服务提供商接受:
<saml2:Attribute
FriendlyName="Firstname"
Name="MDS_firstname"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified"
xsi:type="saml2:AttributeType"
>
<saml2:AttributeValue
ida:From="2013-08-16"
ida:Language="en-GB"
ida:To="2013-08-16"
ida:Verified="true"
xmlns:ida="http://www.some-organisation.org.uk/resource-library/ida/attributes"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:type="ida:PersonNameType"
>
Joe
</saml2:AttributeValue>
</saml2:Attribute>
我的理解是,我需要编写一个特定的身份验证模块,就像提供的示例一样,生成正确的属性,并可能使用 AttributeMap 来获取一个表单的属性,并确保它们映射到一个可以公认。
因此,我已经按照此处概述的方式组合了一个自定义身份验证模块。
这是/lib
自定义模块的代码sspmod_custom_Auth_Source_CustomAuth
:
class sspmod_custom_Auth_Source_CustomAuth extends SimpleSAML_Auth_Source {
// lots of code here
public function finalStep(&$state) {
// fetch information about user Joe, after authentication to p
$attributes['MDS_firstname'] = array('Joe');
$state['Attributes'] = $attributes;
}
}
这是 www 中的代码,它用作发送经过身份验证的用户的端点,它执行它:
<?php
/**
* @file
* The resume endpoint.
* Assume a user is sent here with their state_id in the key `$_REQUEST['auth']`
*/
$state_id = $_REQUEST['auth'];
$state = SimpleSAML_Auth_State::loadState($state_id, sspmod_custom_Auth_Source_customAuth::STAGEID);
$source_id = $state[sspmod_custom_Auth_Source_customAuth::AUTHID];
// fetch original session
$source = SimpleSAML_Auth_Source::getById($source_id);
// add attributes to metadata
$source->finalStep($state);
// generate XML payload and send to service provider as usual
SimpleSAML_Auth_Source::completeAuth($state);
?>
当我这样做时,我最终生成了一些 xml 属性有效负载,看起来有点像这样:
<saml:Attribute Name="MDS_firstname"
NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
>
<saml:AttributeValue
xsi:type="xs:string">
Joe
</saml:AttributeValue>
</saml:Attribute>
如何在saml:Attribute
此处添加额外的属性,以便我可以添加额外的位,例如FriendlyName
, 等等?
至关重要的是,我如何也改变这里xsi:type
的?saml:AttributeValue
我查看了解释身份验证过程和过滤器的文档,但他们似乎并不关心更改我所指的部分。
有什么建议么?
谢谢,
克里斯