From bd7fba7a82693db4f69f1bf5358cd0aaea520a7a Mon Sep 17 00:00:00 2001 From: id4s Date: Tue, 10 Sep 2024 10:47:44 -0700 Subject: [PATCH] Removed attribute that causes issues with internal builds. [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] --- .../Microsoft.IdentityModel.Tokens.csproj | 4 - .../Details/LifetimeValidationError.cs | 7 +- .../Results/Details/ValidationError.cs | 120 +++++++++++++++--- ...ebTokenHandlerValidationParametersTests.cs | 2 +- 4 files changed, 109 insertions(+), 24 deletions(-) diff --git a/src/Microsoft.IdentityModel.Tokens/Microsoft.IdentityModel.Tokens.csproj b/src/Microsoft.IdentityModel.Tokens/Microsoft.IdentityModel.Tokens.csproj index 878486ae2b..c11aa73310 100644 --- a/src/Microsoft.IdentityModel.Tokens/Microsoft.IdentityModel.Tokens.csproj +++ b/src/Microsoft.IdentityModel.Tokens/Microsoft.IdentityModel.Tokens.csproj @@ -57,8 +57,4 @@ - - - - diff --git a/src/Microsoft.IdentityModel.Tokens/Validation/Results/Details/LifetimeValidationError.cs b/src/Microsoft.IdentityModel.Tokens/Validation/Results/Details/LifetimeValidationError.cs index ab7f5e1626..a42da3150d 100644 --- a/src/Microsoft.IdentityModel.Tokens/Validation/Results/Details/LifetimeValidationError.cs +++ b/src/Microsoft.IdentityModel.Tokens/Validation/Results/Details/LifetimeValidationError.cs @@ -3,7 +3,6 @@ using System; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; #nullable enable namespace Microsoft.IdentityModel.Tokens @@ -18,7 +17,7 @@ internal record struct AdditionalInformation( public LifetimeValidationError( MessageDetail messageDetail, - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type exceptionType, + Type exceptionType, StackFrame stackFrame) : base(messageDetail, ValidationFailureType.LifetimeValidationFailed, exceptionType, stackFrame) { @@ -26,7 +25,7 @@ public LifetimeValidationError( public LifetimeValidationError( MessageDetail messageDetail, - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type exceptionType, + Type exceptionType, StackFrame stackFrame, AdditionalInformation? additionalInformation) : base(messageDetail, ValidationFailureType.LifetimeValidationFailed, exceptionType, stackFrame) @@ -37,7 +36,7 @@ public LifetimeValidationError( public LifetimeValidationError( MessageDetail messageDetail, - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type exceptionType, + Type exceptionType, StackFrame stackFrame, Exception innerException, AdditionalInformation? additionalInformation) diff --git a/src/Microsoft.IdentityModel.Tokens/Validation/Results/Details/ValidationError.cs b/src/Microsoft.IdentityModel.Tokens/Validation/Results/Details/ValidationError.cs index 4e91c4b8e5..653d6ff22b 100644 --- a/src/Microsoft.IdentityModel.Tokens/Validation/Results/Details/ValidationError.cs +++ b/src/Microsoft.IdentityModel.Tokens/Validation/Results/Details/ValidationError.cs @@ -4,7 +4,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.Diagnostics.CodeAnalysis; namespace Microsoft.IdentityModel.Tokens { @@ -13,7 +12,6 @@ namespace Microsoft.IdentityModel.Tokens /// internal class ValidationError { - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] private Type _exceptionType; /// @@ -26,7 +24,7 @@ internal class ValidationError public ValidationError( MessageDetail MessageDetail, ValidationFailureType failureType, - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type exceptionType, + Type exceptionType, StackFrame stackFrame) : this(MessageDetail, failureType, exceptionType, stackFrame, innerException: null) { @@ -43,7 +41,7 @@ public ValidationError( public ValidationError( MessageDetail messageDetail, ValidationFailureType failureType, - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type exceptionType, + Type exceptionType, StackFrame stackFrame, Exception innerException) { @@ -60,7 +58,7 @@ public ValidationError( public ValidationError( MessageDetail messageDetail, ValidationFailureType failureType, - [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] Type exceptionType, + Type exceptionType, StackFrame stackFrame, ValidationError innerValidationError) { @@ -77,18 +75,10 @@ public ValidationError( /// /// Creates an instance of an using /// - /// An instantance of an Exception. + /// An instance of an Exception. public Exception GetException() { - Exception exception; - if (InnerException == null && InnerValidationError == null) - exception = Activator.CreateInstance(_exceptionType, MessageDetail.Message) as Exception; - else - exception = Activator.CreateInstance( - _exceptionType, - MessageDetail.Message, - InnerException ?? InnerValidationError.GetException()) as Exception; - + Exception exception = GetException(ExceptionType, InnerException); if (exception is SecurityTokenException securityTokenException) securityTokenException.ValidationError = this; @@ -97,6 +87,106 @@ public Exception GetException() return exception; } + private Exception GetException(Type exceptionType, Exception innerException) + { + Exception exception = null; + + if (innerException == null && InnerValidationError == null) + { + if (exceptionType == typeof(SecurityTokenInvalidAudienceException)) + exception = new SecurityTokenInvalidAudienceException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenInvalidIssuerException)) + exception = new SecurityTokenInvalidIssuerException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenInvalidLifetimeException)) + exception = new SecurityTokenInvalidLifetimeException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenReplayDetectedException)) + exception = new SecurityTokenReplayDetectedException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenReplayAddFailedException)) + exception = new SecurityTokenReplayAddFailedException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenInvalidSigningKeyException)) + exception = new SecurityTokenInvalidSigningKeyException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenInvalidTypeException)) + exception = new SecurityTokenInvalidTypeException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenReplayDetectedException)) + exception = new SecurityTokenReplayDetectedException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenExpiredException)) + exception = new SecurityTokenExpiredException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenNotYetValidException)) + exception = new SecurityTokenNotYetValidException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenInvalidLifetimeException)) + exception = new SecurityTokenInvalidLifetimeException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenNoExpirationException)) + exception = new SecurityTokenNoExpirationException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenInvalidIssuerException)) + exception = new SecurityTokenInvalidIssuerException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenSignatureKeyNotFoundException)) + exception = new SecurityTokenSignatureKeyNotFoundException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenDecryptionFailedException)) + exception = new SecurityTokenDecryptionFailedException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenMalformedException)) + exception = new SecurityTokenMalformedException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenInvalidSignatureException)) + exception = new SecurityTokenInvalidSignatureException(MessageDetail.Message); + else if (exceptionType == typeof(ArgumentNullException)) + exception = new ArgumentNullException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenInvalidAlgorithmException)) + exception = new SecurityTokenInvalidAlgorithmException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenInvalidAlgorithmException)) + exception = new SecurityTokenInvalidAlgorithmException(MessageDetail.Message); + else if (exceptionType == typeof(SecurityTokenException)) + exception = new SecurityTokenException(MessageDetail.Message); + } + else + { + Exception actualException = innerException ?? InnerValidationError.GetException(); + + if (exceptionType == typeof(SecurityTokenInvalidAudienceException)) + exception = new SecurityTokenInvalidAudienceException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenInvalidIssuerException)) + exception = new SecurityTokenInvalidIssuerException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenInvalidLifetimeException)) + exception = new SecurityTokenInvalidLifetimeException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenReplayDetectedException)) + exception = new SecurityTokenReplayDetectedException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenReplayAddFailedException)) + exception = new SecurityTokenReplayAddFailedException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenInvalidSigningKeyException)) + exception = new SecurityTokenInvalidSigningKeyException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenInvalidTypeException)) + exception = new SecurityTokenInvalidTypeException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenReplayDetectedException)) + exception = new SecurityTokenReplayDetectedException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenExpiredException)) + exception = new SecurityTokenExpiredException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenNotYetValidException)) + exception = new SecurityTokenNotYetValidException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenInvalidLifetimeException)) + exception = new SecurityTokenInvalidLifetimeException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenNoExpirationException)) + exception = new SecurityTokenNoExpirationException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenInvalidIssuerException)) + exception = new SecurityTokenInvalidIssuerException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenSignatureKeyNotFoundException)) + exception = new SecurityTokenSignatureKeyNotFoundException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenDecryptionFailedException)) + exception = new SecurityTokenDecryptionFailedException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenMalformedException)) + exception = new SecurityTokenMalformedException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenInvalidSignatureException)) + exception = new SecurityTokenInvalidSignatureException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(ArgumentNullException)) + exception = new ArgumentNullException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenInvalidAlgorithmException)) + exception = new SecurityTokenInvalidAlgorithmException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenInvalidAlgorithmException)) + exception = new SecurityTokenInvalidAlgorithmException(MessageDetail.Message, actualException); + else if (exceptionType == typeof(SecurityTokenException)) + exception = new SecurityTokenException(MessageDetail.Message, actualException); + } + + return exception; + } + protected virtual void AddAdditionalInformation(Exception exception) { // base implementation is no-op. Derived classes can override to add additional information to the exception. diff --git a/test/Microsoft.IdentityModel.JsonWebTokens.Tests/JsonWebTokenHandlerValidationParametersTests.cs b/test/Microsoft.IdentityModel.JsonWebTokens.Tests/JsonWebTokenHandlerValidationParametersTests.cs index a271431ecb..bf8202d5ac 100644 --- a/test/Microsoft.IdentityModel.JsonWebTokens.Tests/JsonWebTokenHandlerValidationParametersTests.cs +++ b/test/Microsoft.IdentityModel.JsonWebTokens.Tests/JsonWebTokenHandlerValidationParametersTests.cs @@ -45,7 +45,7 @@ public async Task ValidateTokenAsync(JsonWebTokenHandlerValidationParametersTheo await jsonWebTokenHandler.ValidateTokenAsync(jwtString, theoryData.TokenValidationParameters); ValidationResult validationParametersResult = await jsonWebTokenHandler.ValidateTokenAsync( - jwtString, theoryData.ValidationParameters, new CallContext(), CancellationToken.None); + jwtString, theoryData.ValidationParameters, theoryData.CallContext, CancellationToken.None); if (tokenValidationParametersResult.IsValid != theoryData.ExpectedIsValid) context.AddDiff($"tokenValidationParametersResult.IsValid != theoryData.ExpectedIsValid");