Skip to content

Commit f89d15d

Browse files
authored
Merge pull request #227 from ITfoxtec/development
Make KeyInfoName configurable.
2 parents feae3f4 + fe20938 commit f89d15d

File tree

14 files changed

+35
-22
lines changed

14 files changed

+35
-22
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
@@ -26,10 +26,10 @@ Support the Danish NemLog-in 2 / OIOSAML 2 and NemLog-in 3 / OIOSAML 3.</Descrip
2626
<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>
2727
<NeutralLanguage>en-US</NeutralLanguage>
2828
<PackageIconUrl>https://itfoxtec.com/favicon.ico</PackageIconUrl>
29-
<AssemblyVersion>4.13.1</AssemblyVersion>
30-
<FileVersion>4.13.1</FileVersion>
29+
<AssemblyVersion>4.13.2</AssemblyVersion>
30+
<FileVersion>4.13.2</FileVersion>
3131
<Copyright>Copyright © 2024</Copyright>
32-
<Version>4.13.1</Version>
32+
<Version>4.13.2</Version>
3333
<SignAssembly>true</SignAssembly>
3434
<AssemblyOriginatorKeyFile>ITfoxtec.SAML2.snk</AssemblyOriginatorKeyFile>
3535
<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
@@ -29,10 +29,10 @@ Support the Danish NemLog-in 2 / OIOSAML 2 and NemLog-in 3 / OIOSAML 3.</Descrip
2929
<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>
3030
<NeutralLanguage>en-US</NeutralLanguage>
3131
<PackageIconUrl>https://itfoxtec.com/favicon.ico</PackageIconUrl>
32-
<AssemblyVersion>4.13.1</AssemblyVersion>
33-
<FileVersion>4.13.1</FileVersion>
32+
<AssemblyVersion>4.13.2</AssemblyVersion>
33+
<FileVersion>4.13.2</FileVersion>
3434
<Copyright>Copyright © 2024</Copyright>
35-
<Version>4.13.1</Version>
35+
<Version>4.13.2</Version>
3636
<SignAssembly>true</SignAssembly>
3737
<AssemblyOriginatorKeyFile>ITfoxtec.SAML2.snk</AssemblyOriginatorKeyFile>
3838
<DelaySign>false</DelaySign>

src/ITfoxtec.Identity.Saml2/Bindings/Saml2PostBinding.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ protected override void BindInternal(Saml2Request saml2RequestResponse, string m
5050
{
5151
Cryptography.SignatureAlgorithm.ValidateAlgorithm(saml2RequestResponse.Config.SignatureAlgorithm);
5252
Cryptography.XmlCanonicalizationMethod.ValidateCanonicalizationMethod(saml2RequestResponse.Config.XmlCanonicalizationMethod);
53-
XmlDocument = XmlDocument.SignDocument(saml2RequestResponse.Config.SigningCertificate, saml2RequestResponse.Config.SignatureAlgorithm, saml2RequestResponse.Config.XmlCanonicalizationMethod, CertificateIncludeOption, saml2RequestResponse.IdAsString);
53+
XmlDocument = XmlDocument.SignDocument(saml2RequestResponse.Config.SigningCertificate, saml2RequestResponse.Config.SignatureAlgorithm, saml2RequestResponse.Config.XmlCanonicalizationMethod, CertificateIncludeOption, saml2RequestResponse.IdAsString, saml2RequestResponse.Config.IncludeKeyInfoName);
5454
}
5555
}
5656

src/ITfoxtec.Identity.Saml2/Configuration/Saml2Configuration.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,5 +77,10 @@ public X509Certificate2 DecryptionCertificate
7777
/// Sign type for the authn responses created by the library.
7878
/// </summary>
7979
public Saml2AuthnResponseSignTypes AuthnResponseSignType { get; set; } = Saml2AuthnResponseSignTypes.SignResponse;
80+
81+
/// <summary>
82+
/// Include key info name in signature.
83+
/// </summary>
84+
public bool IncludeKeyInfoName { get; set; }
8085
}
8186
}

src/ITfoxtec.Identity.Saml2/Cryptography/Saml2SignedXml.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public Saml2SignedXml(XmlElement element, X509Certificate2 certificate, string s
2222
Saml2Signer = new Saml2Signer(certificate, signatureAlgorithm);
2323
}
2424

25-
public void ComputeSignature(X509IncludeOption includeOption, string id)
25+
public void ComputeSignature(X509IncludeOption includeOption, string id, bool includeKeyInfoName)
2626
{
2727
var reference = new Reference("#" + id);
2828
reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
@@ -36,7 +36,10 @@ public void ComputeSignature(X509IncludeOption includeOption, string id)
3636
ComputeSignature();
3737

3838
KeyInfo = new KeyInfo();
39-
KeyInfo.AddClause(new KeyInfoName(Convert.ToBase64String(Saml2Signer.Certificate.GetCertHash())));
39+
if (includeKeyInfoName)
40+
{
41+
KeyInfo.AddClause(new KeyInfoName(Convert.ToBase64String(Saml2Signer.Certificate.GetCertHash())));
42+
}
4043
KeyInfo.AddClause(new KeyInfoX509Data(Saml2Signer.Certificate, includeOption));
4144
}
4245

src/ITfoxtec.Identity.Saml2/Extensions/XmlDocumentExtensions.cs

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,16 @@ internal static class XmlDocumentExtensions
2020
/// <param name="xmlCanonicalizationMethod">The Signature XML canonicalization method used to sign the document</param>
2121
/// <param name="includeOption">Certificate include option</param>
2222
/// <param name="id">The id of the topmost element in the XML document</param>
23-
internal static XmlDocument SignDocument(this XmlDocument xmlDocument, X509Certificate2 certificate, string signatureAlgorithm, string xmlCanonicalizationMethod, X509IncludeOption includeOption, string id)
23+
/// <param name="includeKeyInfoName">Include key info name clause in signature</param>
24+
internal static XmlDocument SignDocument(this XmlDocument xmlDocument, X509Certificate2 certificate, string signatureAlgorithm, string xmlCanonicalizationMethod, X509IncludeOption includeOption, string id, bool includeKeyInfoName)
2425
{
2526
if (certificate == null)
2627
{
2728
throw new ArgumentNullException(nameof(certificate));
2829
}
2930

3031
var signedXml = new Saml2SignedXml(xmlDocument.DocumentElement, certificate, signatureAlgorithm, xmlCanonicalizationMethod);
31-
signedXml.ComputeSignature(includeOption, id);
32+
signedXml.ComputeSignature(includeOption, id, includeKeyInfoName);
3233

3334
var issuer = xmlDocument.DocumentElement[Saml2Constants.Message.Issuer, Saml2Constants.AssertionNamespace.OriginalString];
3435
xmlDocument.DocumentElement.InsertAfter(xmlDocument.ImportNode(signedXml.GetXml(), true), issuer);
@@ -42,7 +43,8 @@ internal static XmlDocument SignDocument(this XmlDocument xmlDocument, X509Certi
4243
/// <param name="signatureAlgorithm">The Signature Algorithm used to sign the assertion</param>
4344
/// <param name="xmlCanonicalizationMethod">The Signature XML canonicalization method used to sign the assertion</param>
4445
/// <param name="includeOption">Certificate include option</param>
45-
internal static void SignAssertion(this XmlDocument xmlDocument, XmlElement xmlAssertionElement, X509Certificate2 certificate, string signatureAlgorithm, string xmlCanonicalizationMethod, X509IncludeOption includeOption)
46+
/// <param name="includeKeyInfoName">Include key info name clause in signature</param>
47+
internal static void SignAssertion(this XmlDocument xmlDocument, XmlElement xmlAssertionElement, X509Certificate2 certificate, string signatureAlgorithm, string xmlCanonicalizationMethod, X509IncludeOption includeOption, bool includeKeyInfoName)
4648
{
4749
if (certificate == null)
4850
{
@@ -52,7 +54,7 @@ internal static void SignAssertion(this XmlDocument xmlDocument, XmlElement xmlA
5254
var id = xmlAssertionElement.GetAttribute(Saml2Constants.Message.Id);
5355

5456
var signedXml = new Saml2SignedXml(xmlAssertionElement, certificate, signatureAlgorithm, xmlCanonicalizationMethod);
55-
signedXml.ComputeSignature(includeOption, id);
57+
signedXml.ComputeSignature(includeOption, id, includeKeyInfoName);
5658

5759
var issuer = xmlAssertionElement[Saml2Constants.Message.Issuer, Saml2Constants.AssertionNamespace.OriginalString];
5860
xmlAssertionElement.InsertAfter(xmlDocument.ImportNode(signedXml.GetXml(), true), issuer);

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ Support the Danish NemLog-in 2 / OIOSAML 2 and NemLog-in 3 / OIOSAML 3.</Descrip
3030
<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>
3131
<NeutralLanguage>en-US</NeutralLanguage>
3232
<PackageIconUrl>https://itfoxtec.com/favicon.ico</PackageIconUrl>
33-
<AssemblyVersion>4.13.1</AssemblyVersion>
34-
<FileVersion>4.13.1</FileVersion>
33+
<AssemblyVersion>4.13.2</AssemblyVersion>
34+
<FileVersion>4.13.2</FileVersion>
3535
<Copyright>Copyright © 2024</Copyright>
36-
<Version>4.13.1</Version>
36+
<Version>4.13.2</Version>
3737
<SignAssembly>true</SignAssembly>
3838
<AssemblyOriginatorKeyFile>ITfoxtec.SAML2.snk</AssemblyOriginatorKeyFile>
3939
<DelaySign>false</DelaySign>

src/ITfoxtec.Identity.Saml2/Request/Saml2ArtifactResolve.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ protected internal void SignArtifactResolve()
109109
{
110110
Cryptography.SignatureAlgorithm.ValidateAlgorithm(Config.SignatureAlgorithm);
111111
Cryptography.XmlCanonicalizationMethod.ValidateCanonicalizationMethod(Config.XmlCanonicalizationMethod);
112-
XmlDocument = XmlDocument.SignDocument(Config.SigningCertificate, Config.SignatureAlgorithm, Config.XmlCanonicalizationMethod, CertificateIncludeOption, Id.Value);
112+
XmlDocument = XmlDocument.SignDocument(Config.SigningCertificate, Config.SignatureAlgorithm, Config.XmlCanonicalizationMethod, CertificateIncludeOption, Id.Value, Config.IncludeKeyInfoName);
113113
}
114114

115115
protected override IEnumerable<XObject> GetXContent()

src/ITfoxtec.Identity.Saml2/Request/Saml2ArtifactResponse.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ protected internal void SignArtifactResponse()
4848
{
4949
Cryptography.SignatureAlgorithm.ValidateAlgorithm(Config.SignatureAlgorithm);
5050
Cryptography.XmlCanonicalizationMethod.ValidateCanonicalizationMethod(Config.XmlCanonicalizationMethod);
51-
XmlDocument = XmlDocument.SignDocument(Config.SigningCertificate, Config.SignatureAlgorithm, Config.XmlCanonicalizationMethod, CertificateIncludeOption, Id.Value);
51+
XmlDocument = XmlDocument.SignDocument(Config.SigningCertificate, Config.SignatureAlgorithm, Config.XmlCanonicalizationMethod, CertificateIncludeOption, Id.Value, Config.IncludeKeyInfoName);
5252
}
5353

5454
protected override void ValidateElementName()

src/ITfoxtec.Identity.Saml2/Request/Saml2AuthnResponse.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ protected internal void SignAuthnResponseAssertion(X509IncludeOption certificate
247247

248248
Cryptography.SignatureAlgorithm.ValidateAlgorithm(Config.SignatureAlgorithm);
249249
Cryptography.XmlCanonicalizationMethod.ValidateCanonicalizationMethod(Config.XmlCanonicalizationMethod);
250-
XmlDocument.SignAssertion(GetAssertionElementReference(), Config.SigningCertificate, Config.SignatureAlgorithm, Config.XmlCanonicalizationMethod, certificateIncludeOption);
250+
XmlDocument.SignAssertion(GetAssertionElementReference(), Config.SigningCertificate, Config.SignatureAlgorithm, Config.XmlCanonicalizationMethod, certificateIncludeOption, Config.IncludeKeyInfoName);
251251
}
252252

253253
protected internal override void Read(string xml, bool validate = false, bool detectReplayedTokens = true)

0 commit comments

Comments
 (0)