From 431c431461011c3ca35524f663f31738d7982323 Mon Sep 17 00:00:00 2001 From: Chris Andrews Date: Oct 12 2010 15:36:54 +0000 Subject: Add support for multi-valued SAML Assertion Attributes. --- diff --git a/lib/Net/SAML2/Protocol/Assertion.pm b/lib/Net/SAML2/Protocol/Assertion.pm index d3ec7a2..b0f0b3d 100644 --- a/lib/Net/SAML2/Protocol/Assertion.pm +++ b/lib/Net/SAML2/Protocol/Assertion.pm @@ -34,8 +34,10 @@ sub new { $self->{attributes} = {}; for my $node ($xpath->findnodes('//saml:Assertion/saml:AttributeStatement/saml:Attribute')) { - $self->{attributes}->{$node->getAttribute('Name')} = - $node->findvalue('saml:AttributeValue')->value; + my @values = $node->findnodes('saml:AttributeValue'); + $self->{attributes}->{$node->getAttribute('Name')} = [ + map { $_->string_value } @values + ]; } $self->{session} = $xpath->findvalue('//saml:AuthnStatement/@SessionIndex')->value; @@ -86,7 +88,7 @@ Returns the CN attribute, if provided. sub name { my ($self) = @_; - return $self->{attributes}->{CN}; + return $self->{attributes}->{CN}->[0]; } 1; diff --git a/t/03-assertions.t b/t/03-assertions.t new file mode 100644 index 0000000..2dd1f8d --- /dev/null +++ b/t/03-assertions.t @@ -0,0 +1,80 @@ +use Test::More; +use Net::SAML2; + +my $xml = < + + http://sso.dev.venda.com/opensso + + + + + http://sso.dev.venda.com/opensso + + + + + + + + + + + 1CCTfUP/Sbihuz4HCySlSizG9+o= + + + lHH8QBcAievrgDYmYXXk+QnWC/ybLYcbIZPEs06rEi7wE9Iwb96UxPM8zY24SSJ9CPZdZqyNsyIu9Ww+4dq7RcUbE9dBCKwAZjz/ze6jPTlEZPdG1H+g+c8HnC9mNTI1g4WDS8zBmSbBbYBEPiuVxHn245JaUrTRjoLE0Xr4EoY= + + + MIIDDDCCAfSgAwIBAgIBBDANBgkqhkiG9w0BAQUFADA3MQswCQYDVQQGEwJVUzEOMAwGA1UECgwFbG9jYWwxCzAJBgNVBAsMAmN0MQswCQYDVQQDDAJDQTAeFw0xMDEwMDYxNDE5MDJaFw0xMTEwMDYxNDE5MDJaMGMxCzAJBgNVBAYTAkdCMQ8wDQYDVQQIEwZMb25kb24xDzANBgNVBAcTBkxvbmRvbjEOMAwGA1UEChMFVmVuZGExDDAKBgNVBAsTA1NTTzEUMBIGA1UEAxMLUlNBIE9wZW5TU08wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALatk5hsXZA1BVxgFmWsAHna/ok3wMIYAtf2S4pTWlhgYEEtz8btVPzOxLQ4eu6zAQHoPvOuZf0/LzQuhDgHVxX2x0BS/f5CfEC1Tx+gcSlINKz5pc1eylERMszXHrgJEqc5qJL/hqizrPQSTa5c4P1tOApUGmr5ri3GWs+j/OQhAgMBAAGjezB5MAkGA1UdEwQCMAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBTJjwYYJePNfPQLlfplEcTJjF4NNzAfBgNVHSMEGDAWgBTWcCDL1HYlBpul6nAYYaX4JGy0FDANBgkqhkiG9w0BAQUFAAOCAQEAK37Jlh5FxY4Zzph9Q2lkPwBQpHqSM7WeWjOMlQo2cP3oPpbPMohmZwQncNOdHgxERqJ4C4c+olRwFxxA7D/S90emxn9c/dyv3zQIJtNwguhcEX35MaqEFUGvbqnmJukEzdbJm4FU2FC0qGni7Jkvx/bCmS2xvdf71sR2HKSzqmUHys4PAHJhFCVdQXfROlO+964Oxab/HzFUwDCf0wzJVksEB4DhP2sJtUIBJTpwofywMX5qLQuM6qPUJ/lRqpaxPOweKlkC5ndFnPtChc0+ZsJI3sBttz+07qyeZJJ8QNx9pRjKr9G8jtj5lXX+BOWizUt7QBTYNFQgWibMs3Ekmg== + + + + + nKdwzcgBYGt42xovLuctZ60tyafv + + + + + + + http://ct.local + + + + + urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport + + + + + 123456 + 234567 + 345678 + + + demo@sso.venda.com + + + + +XML + +my $assertion = Net::SAML2::Protocol::Assertion->new( + xml => $xml +); +ok($assertion); + +is($assertion->session, 's2b087bdce06dbbf9cd4662af82b8b853d4d285c01'); +is($assertion->nameid, 'nKdwzcgBYGt42xovLuctZ60tyafv'); + +is(scalar keys %{ $assertion->attributes }, 2); +is(scalar @{ $assertion->attributes->{EmailAddress} }, 1); +is(scalar @{ $assertion->attributes->{Phone2} }, 3); + +is($assertion->attributes->{EmailAddress}->[0], 'demo@sso.venda.com'); +is($assertion->attributes->{Phone2}->[0], '123456'); +is($assertion->attributes->{Phone2}->[1], '234567'); +is($assertion->attributes->{Phone2}->[2], '345678'); + +done_testing;