Skip to content

Commit 6ccc6eb

Browse files
authored
Handle multiple entity descriptors in IdP metadata, by choosing the first one. (#862)
1 parent 0bb219b commit 6ccc6eb

1 file changed

Lines changed: 15 additions & 5 deletions

File tree

Provider.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
use LightSaml\Model\Context\SerializationContext;
3232
use LightSaml\Model\Metadata\AssertionConsumerService;
3333
use LightSaml\Model\Metadata\ContactPerson;
34+
use LightSaml\Model\Metadata\EntitiesDescriptor;
3435
use LightSaml\Model\Metadata\EntityDescriptor;
3536
use LightSaml\Model\Metadata\KeyDescriptor;
3637
use LightSaml\Model\Metadata\Metadata;
@@ -252,9 +253,20 @@ protected function getIdentityProviderEntityDescriptorManually(): EntityDescript
252253
return $builder->get();
253254
}
254255

256+
protected function getFirstEntityDescriptorFromXml(string $xml): EntityDescriptor
257+
{
258+
$descriptor = Metadata::fromXML($xml, new DeserializationContext());
259+
260+
if ($descriptor instanceof EntitiesDescriptor) {
261+
return Arr::first($descriptor->getAllEntityDescriptors());
262+
}
263+
264+
return $descriptor;
265+
}
266+
255267
protected function getIdentityProviderEntityDescriptorFromXml(): EntityDescriptor
256268
{
257-
return Metadata::fromXML($this->getConfig('metadata'), new DeserializationContext());
269+
return $this->getFirstEntityDescriptorFromXml($this->getConfig('metadata'));
258270
}
259271

260272
protected function getIdentityProviderEntityDescriptorFromUrl(): EntityDescriptor
@@ -263,10 +275,8 @@ protected function getIdentityProviderEntityDescriptorFromUrl(): EntityDescripto
263275
$xml = Cache::get(self::CACHE_KEY);
264276
$ttl = Cache::get(self::CACHE_KEY_TTL);
265277

266-
$deserializationContext = new DeserializationContext();
267-
268278
if ($xml && $ttl && $ttl + $this->getConfig('ttl', 86400) > time()) {
269-
return Metadata::fromXML($xml, $deserializationContext);
279+
return $this->getFirstEntityDescriptorFromXml($xml);
270280
}
271281

272282
Cache::forever(self::CACHE_KEY_TTL, time());
@@ -284,7 +294,7 @@ protected function getIdentityProviderEntityDescriptorFromUrl(): EntityDescripto
284294
}
285295
}
286296

287-
return Metadata::fromXML($xml, $deserializationContext);
297+
return $this->getFirstEntityDescriptorFromXml($xml);
288298
}
289299

290300
/**

0 commit comments

Comments
 (0)