3

在尝试了 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

我查看了解释身份验证过程和过滤器的文档,但他们似乎并不关心更改我所指的部分。

有什么建议么?

谢谢,

克里斯

4

0 回答 0