Skip to content

Commit 83f7814

Browse files
committed
SAML 2.0 Metadata read support EntitiesDescriptor as root element. The first EntityDescriptor element is selected.
1 parent c84725f commit 83f7814

File tree

4 files changed

+29
-17
lines changed

4 files changed

+29
-17
lines changed

src/ITfoxtec.Identity.Saml2.Mvc/ITfoxtec.Identity.Saml2.Mvc.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@ Support the Danish NemLog-in 2 / OIOSAML 2 and NemLog-in 3 / OIOSAML 3.</Descrip
2222
<PackageTags>SAML SAML 2.0 SAML2.0 SAML2 SAML 2 SAML-P SAMLP SSO Identity Provider (IdP) and Relying Party (RP) Authentication Metadata OIOSAML OIOSAML 2 OIOSAML 3 NemLogin NemLog-in 2 NemLog-in 3 ASP.NET MVC</PackageTags>
2323
<NeutralLanguage>en-US</NeutralLanguage>
2424
<PackageIconUrl>https://itfoxtec.com/favicon.ico</PackageIconUrl>
25-
<AssemblyVersion>4.6.1.0</AssemblyVersion>
26-
<FileVersion>4.6.1.0</FileVersion>
25+
<AssemblyVersion>4.6.2.0</AssemblyVersion>
26+
<FileVersion>4.6.2.0</FileVersion>
2727
<Copyright>Copyright © 2021</Copyright>
28-
<Version>4.6.1-beta1</Version>
28+
<Version>4.6.2-beta1</Version>
2929
<SignAssembly>true</SignAssembly>
3030
<AssemblyOriginatorKeyFile>ITfoxtec.SAML2.snk</AssemblyOriginatorKeyFile>
3131
<DelaySign>false</DelaySign>

src/ITfoxtec.Identity.Saml2.MvcCore/ITfoxtec.Identity.Saml2.MvcCore.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ Support the Danish NemLog-in 2 / OIOSAML 2 and NemLog-in 3 / OIOSAML 3.</Descrip
2424
<PackageTags>SAML SAML 2.0 SAML2.0 SAML2 SAML 2 SAML-P SAMLP SSO Identity Provider (IdP) Relying Party (RP) Authentication Metadata OIOSAML OIOSAML 2 OIOSAML 3 NemLogin NemLog-in 2 NemLog-in 3 ASP.NET MVC Core</PackageTags>
2525
<NeutralLanguage>en-US</NeutralLanguage>
2626
<PackageIconUrl>https://itfoxtec.com/favicon.ico</PackageIconUrl>
27-
<AssemblyVersion>4.6.1.0</AssemblyVersion>
28-
<FileVersion>4.6.1.0</FileVersion>
27+
<AssemblyVersion>4.6.2.0</AssemblyVersion>
28+
<FileVersion>4.6.2.0</FileVersion>
2929
<Copyright>Copyright © 2021</Copyright>
30-
<Version>4.6.1-beta1</Version>
30+
<Version>4.6.2-beta1</Version>
3131
<SignAssembly>true</SignAssembly>
3232
<AssemblyOriginatorKeyFile>ITfoxtec.SAML2.snk</AssemblyOriginatorKeyFile>
3333
<DelaySign>false</DelaySign>

src/ITfoxtec.Identity.Saml2/ITfoxtec.Identity.Saml2.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ Support the Danish NemLog-in 2 / OIOSAML 2 and NemLog-in 3 / OIOSAML 3.</Descrip
2525
<PackageTags>SAML SAML 2.0 SAML2.0 SAML2 SAML 2 SAML-P SAMLP SSO Identity Provider (IdP) Relying Party (RP) Authentication Metadata OIOSAML OIOSAML 2 OIOSAML 3 NemLogin NemLog-in 2 NemLog-in 3</PackageTags>
2626
<NeutralLanguage>en-US</NeutralLanguage>
2727
<PackageIconUrl>https://itfoxtec.com/favicon.ico</PackageIconUrl>
28-
<AssemblyVersion>4.6.1.0</AssemblyVersion>
29-
<FileVersion>4.6.1.0</FileVersion>
28+
<AssemblyVersion>4.6.2.0</AssemblyVersion>
29+
<FileVersion>4.6.2.0</FileVersion>
3030
<Copyright>Copyright © 2021</Copyright>
31-
<Version>4.6.1-beta1</Version>
31+
<Version>4.6.2-beta1</Version>
3232
<SignAssembly>true</SignAssembly>
3333
<AssemblyOriginatorKeyFile>ITfoxtec.SAML2.snk</AssemblyOriginatorKeyFile>
3434
<DelaySign>false</DelaySign>

src/ITfoxtec.Identity.Saml2/Schemas/Metadata/EntityDescriptor.cs

Lines changed: 20 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -160,16 +160,22 @@ public virtual EntityDescriptor ReadIdPSsoDescriptor(string idPMetadataXml)
160160
{
161161
var metadataXmlDocument = idPMetadataXml.ToXmlDocument();
162162

163-
if (metadataXmlDocument.DocumentElement.NamespaceURI != Saml2MetadataConstants.MetadataNamespace.OriginalString)
163+
var entityDescriptorElement = metadataXmlDocument.DocumentElement.SelectSingleNode($"//*[local-name()='{Saml2MetadataConstants.Message.EntityDescriptor}']") as XmlElement;
164+
if (entityDescriptorElement == null)
165+
{
166+
throw new Saml2RequestException("EntityDescriptorElement element not found in Metadata.");
167+
}
168+
169+
if (entityDescriptorElement.NamespaceURI != Saml2MetadataConstants.MetadataNamespace.OriginalString)
164170
{
165171
throw new Saml2RequestException("Not Metadata.");
166172
}
167173

168-
EntityId = metadataXmlDocument.DocumentElement.Attributes[Saml2MetadataConstants.Message.EntityId].GetValueOrNull<string>();
174+
EntityId = entityDescriptorElement.Attributes[Saml2MetadataConstants.Message.EntityId].GetValueOrNull<string>();
169175

170-
Id = metadataXmlDocument.DocumentElement.Attributes[Saml2MetadataConstants.Message.Id].GetValueOrNull<Saml2Id>();
176+
Id = entityDescriptorElement.Attributes[Saml2MetadataConstants.Message.Id].GetValueOrNull<Saml2Id>();
171177

172-
var idPSsoDescriptorElement = metadataXmlDocument.DocumentElement[Saml2MetadataConstants.Message.IdPSsoDescriptor, Saml2MetadataConstants.MetadataNamespace.OriginalString];
178+
var idPSsoDescriptorElement = entityDescriptorElement[Saml2MetadataConstants.Message.IdPSsoDescriptor, Saml2MetadataConstants.MetadataNamespace.OriginalString];
173179
if (idPSsoDescriptorElement != null)
174180
{
175181
IdPSsoDescriptor = new IdPSsoDescriptor().Read(idPSsoDescriptorElement);
@@ -182,16 +188,22 @@ public virtual EntityDescriptor ReadSPSsoDescriptor(string spMetadataXml)
182188
{
183189
var metadataXmlDocument = spMetadataXml.ToXmlDocument();
184190

185-
if (metadataXmlDocument.DocumentElement.NamespaceURI != Saml2MetadataConstants.MetadataNamespace.OriginalString)
191+
var entityDescriptorElement = metadataXmlDocument.DocumentElement.SelectSingleNode($"//*[local-name()='{Saml2MetadataConstants.Message.EntityDescriptor}']") as XmlElement;
192+
if (entityDescriptorElement == null)
193+
{
194+
throw new Saml2RequestException("EntityDescriptorElement element not found in Metadata.");
195+
}
196+
197+
if (entityDescriptorElement.NamespaceURI != Saml2MetadataConstants.MetadataNamespace.OriginalString)
186198
{
187199
throw new Saml2RequestException("Not Metadata.");
188200
}
189201

190-
EntityId = metadataXmlDocument.DocumentElement.Attributes[Saml2MetadataConstants.Message.EntityId].GetValueOrNull<string>();
202+
EntityId = entityDescriptorElement.Attributes[Saml2MetadataConstants.Message.EntityId].GetValueOrNull<string>();
191203

192-
Id = metadataXmlDocument.DocumentElement.Attributes[Saml2MetadataConstants.Message.Id].GetValueOrNull<Saml2Id>();
204+
Id = entityDescriptorElement.Attributes[Saml2MetadataConstants.Message.Id].GetValueOrNull<Saml2Id>();
193205

194-
var spSsoDescriptorElement = metadataXmlDocument.DocumentElement[Saml2MetadataConstants.Message.SPSsoDescriptor, Saml2MetadataConstants.MetadataNamespace.OriginalString];
206+
var spSsoDescriptorElement = entityDescriptorElement[Saml2MetadataConstants.Message.SPSsoDescriptor, Saml2MetadataConstants.MetadataNamespace.OriginalString];
195207
if (spSsoDescriptorElement != null)
196208
{
197209
SPSsoDescriptor = new SPSsoDescriptor().Read(spSsoDescriptorElement);

0 commit comments

Comments
 (0)