代码之家  ›  专栏  ›  技术社区  ›  Ilhicas

将samlp:扩展添加到authsources。php SimpleSamlPHP

  •  1
  • Ilhicas  · 技术社区  · 6 年前

    我希望完成的是在Authnrequest中添加以下示例

    <samlp:Extensions>
       <somens:TheExtensionName xmlns:somens="http://uriofextension/">
    <somens:TheExtensionName Name="AttributeName" NameFormat="urn:oasis:names:tc:SAML:2.0:attrname-format:uri"
    isRequired="true"/>
       </somens:TheExtensionName >
    </samlp:Extensions>
    

    通过使用authsource。php,我如何才能做到这一点?

    我已经阅读了文档

    https://simplesamlphp.org/docs/stable/saml:sp

    5.8使用samlp:扩展

    他们有:

    $dom = \SAML2\DOMDocumentFactory::create();
    $ce = $dom->createElementNS('http://www.example.com/XFoo', 'xfoo:test', 'Test data!');
    $ext[] = new \SAML2\XML\Chunk($ce);
    
    $auth = new \SimpleSAML\Auth\Simple('default-sp');
    $auth->login(array(
        'saml:Extensions' => $ext,
    ));
    

    但这些代码包括在哪里?我已经将其添加到authsources中。php没有运气,也不知道如何使用它,再考虑一下我对php的知识缺乏,所以我可能只是在搞乱事情。

    这是我在authsources中尝试过的。php

    忽略代码中属于所提供示例的部分

    <?php
    
    $dom = \SAML2\DOMDocumentFactory::create();
    $ce = $dom->createElementNS('http://www.example.com/XFoo', 'xfoo:test', 'Test data!');
    $ext[] = new \SAML2\XML\Chunk($ce);
    
    $config = array(
    
        'sp.name' => array(
            'saml:SP',
            'privatekey'  => '/certs/privkey.pem',
            'certificate' => '/certs/fullchain.pem',
            'entityID' => 'entityID',
            'idp' => 'idpID',
            'saml:Extensions' => $ext,
    
        ),
    
    );
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Ilhicas    6 年前

    我无法使用authsources。php,但还是设法用我需要的samlp:extensions authnrequest重新创建了它。

    我创建了一个php应用程序,并将其连接到Simplesaml服务提供商,以便使用samlp:Extensions发送请求,下面是针对那些有相同问题的人的代码:

    应用程序/应用程序。php

    <?php
        //Load SimpleSAMLphp.
        require_once('/var/www/simplesamlphp/lib/_autoload.php');
    
        //Initiate a SimpleSAML_Auth_Simple object.
        $as = new SimpleSAML_Auth_Simple('name-of-sp');
    
        //Standard PHP lib more info at -> http://php.net/manual/en/domdocument.createelementns.phphttp://php.net/manual/en/domdocument.createelementns.php
        $dom = SAML2_DOMDocumentFactory::create();
    
        $attributes_ext = $dom->createElementNS('namespace-uri', 'fa:RequestedAttributes');
    
        $item = $dom->createElementNS('namespace-uri', 'fa:RequestedAttribute');
        $attrName = $dom->createAttribute('Name');
        $attrName->value = 'attributeName';
    
        $attrNameFormat = $dom->createAttribute('NameFormat');
        $attrNameFormat->value = "urn:oasis:names:tc:SAML:2.0:attrname-format:uri";
    
        $attrRequirement = $dom->createAttribute('isRequired');
        $attrRequirement->value = "true";
    
        $item->appendChild($attrName);
        $item->appendChild($attrNameFormat);
        $item->appendChild($attrRequirement);
    
        $attributes_ext->appendChild($item);
        $ext[] = new SAML2_XML_Chunk($attributes_ext);
    
        $as->login(array(
            'saml:Extensions' => $ext,
        ));
    
        //If the user is not authenticated, authenticate the user
        $as->requireAuth();
    
        //Get the users attributes and print them.
        $attributes = $as->getAttributes();
        print_r($attributes);
    
        //Output the attributes to a file
        $myFile = "/tmp/attributes.log";
        $fh = fopen($myFile, 'a') or die("can't open file");
        $stringData = print_r($attributes, true);
        fwrite($fh, $stringData);
        fclose($fh);
    
        //Displays a Login and Logout link
        $url_in = $as->getLoginURL();
        $url_out = $as->getLogoutURL();
        print('<br><a href="' . htmlspecialchars($url_in) . '">Login</a>');
        print('<br><a href="' . htmlspecialchars($url_out) . '">Logout</a><br>');
    
        //If using PHP sessions in SimpleSAMLphp cleanup the SimpleSAMLphp session to be able to use $_SESSION
        $session = SimpleSAML_Session::getSessionFromRequest();
        $session->cleanup();
    
        //Display PHP information
        phpinfo()
    ?>
    </body>
    </html>
    

    将其设置为运行以进行实验

    php-S 0.0.0.0:5000-t应用程序/

    导航到localhost:5000/app。php,这将使用SP配置自动将您发送到IDP的登录。您可以尝试使用authsources。simplesamlphp提供的php示例