解密NameID的值(getAuthData('saml:sp:NameID')-> value)

时间:2019-08-09 09:37:16

标签: php saml simplesamlphp

我想以明文形式检索NameID使用的IDP,但是使用getAuthData函数,我得到了一个加密值。

怎么办?

实际上,我可以使用:

require_once("pathlin");

$as = new SimpleSAML_Auth_Simple('default-sp');

$attrs = $as->getAttributes();

我可以解析字典并获得一些属性。

但是现在我想获取NameID,我尝试使用:

$as->getAuthData("saml:sp:NameID")->value

authsource.php:

$config = [
'admin' => [
    'core:AdminPassword',
],
'example-userpass' => [
    'exampleauth:UserPass',
    'testuid:testtest' => [
        'uid' => ['testuid'],
    ],
],

];

saml20-idp-hosted.php:

$metadata['__DYNAMIC:1__'] = [
'host' => '__DEFAULT__',

'privatekey' => 'example.org.pem',
'certificate' => 'example.org.crt',

'auth' => 'example-userpass',
'attributes.NameFormat' => 'urn:oasis:names:tc:SAML:2.0:attrname-format:uri',
'authproc' => array(
  100 => array('class' => 'core:AttributeMap', 'name2oid'),
),];

config.php(authproc.idp):

'authproc.idp' => [
  1 => array(
    'class' => 'saml:TransientNameID',
  ),
  2 => array(
      'class' => 'saml:PersistentNameID',
      'attribute' => 'eduPersonPrincipalName',
  ),
  3 => array(
      'class' => 'saml:AttributeNameID',
      'attribute' => 'mail',
      'Format' => 'urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress',),],

那么,如何通过NameID获取'testuid'?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您的IdP没有设置NameID,并且您的SP并没有请求非临时的NameID。默认情况下,SSP会生成一个瞬态NameID,该瞬态NameID只是随机的,而不是加密值。

要在测试IDP中设置NameID,您需要一个authproc过滤器来设置NameID。 AttributeNameID将让您从属性中设置一个。 最后,您将需要SP在身份验证请求中请求nameID(请参见NameID policy),或确保您的SP元数据已定义了所需的nameID格式(通过在SP authsource中定义NameIDFormat并将元数据重新加载到idp)。

最后,通常只需将用户名放在属性中就容易得多。