我在尝试SimpleSAML邮件列表,检查文档,并花费大量时间阅读SimpleSAML源代码后,我在这里问这个问题,我希望这里有人可以帮助解决问题。
对于SimplesSAML我还是有些新手,请跟我说 - 我完全有可能对SAML或图书馆做出一些基本的误解。
当定义元数据发送到依赖服务提供商时,如何控制xsi:type
的{{1}}您想要包含的属性?
例如,假设我需要在现有的Attribute语句中生成这样的xml以供服务提供者接受:
attributeValue
我的理解是我需要编写一个特定的auth模块,比如提供的示例,因此生成了正确的属性,并可能使用AttributeMap获取一个表单的属性,并确保它们映射到表单这是可以接受的。
所以,我已按照here概述的方式整理了一个自定义身份验证模块。
以下是<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>
中自定义模块的代码/lib
:
sspmod_custom_Auth_Source_CustomAuth
以下是www中的代码,该代码用作发送经过身份验证的用户的端点,用于执行该操作:
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;
}
}
当我这样做时,我最终生成了一些xml属性有效负载,看起来有点像这样:
<?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);
?>
如何在此处向 <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
的{{1}}呢?
我查看了解释auth procs和过滤器的文档,但他们似乎并不关心我在这里更改部分。
有什么建议吗?
谢谢,
克里斯