public void ConstructorB(EncryptingCredentialsTheoryData theoryData) { var context = TestUtilities.WriteHeader($"{this}.ConstructorB", theoryData); try { var encryptingCredentials = new EncryptingCredentials((SymmetricSecurityKey)theoryData.Key, theoryData.Enc); //Algorithm value should be 'None' IdentityComparer.AreEqual(encryptingCredentials.Alg, SecurityAlgorithms.None, context); theoryData.ExpectedException.ProcessNoException(context); } catch (Exception exception) { theoryData.ExpectedException.ProcessException(exception, context); } TestUtilities.AssertFailIfErrors(context); }
public void GetSigningKeys(JsonWebKeySetTheoryData theoryData) { var context = TestUtilities.WriteHeader($"{this}.GetSigningKeys", theoryData); try { var signingKeys = theoryData.JsonWebKeySet.GetSigningKeys(); IdentityComparer.AreEqual(signingKeys, theoryData.ExpectedSigningKeys, context); theoryData.ExpectedException.ProcessNoException(context); } catch (Exception ex) { theoryData.ExpectedException.ProcessException(ex, context); } TestUtilities.AssertFailIfErrors(context); }
public void Constructors(string json, JsonWebKey compareTo, ExpectedException ee) { var context = new CompareContext(); try { var jsonWebKey = new JsonWebKey(json); ee.ProcessNoException(context); if (compareTo != null) { IdentityComparer.AreEqual(jsonWebKey, compareTo, context); } } catch (Exception ex) { ee.ProcessException(ex, context.Diffs); } TestUtilities.AssertFailIfErrors(context); }
public void ConvertJsonWebKeyToSecurityKey(JsonWebKeyConverterTheoryData theoryData) { var context = TestUtilities.WriteHeader($"{this}.ConvertJsonWebKeyToSecurityKey", theoryData); try { var wasConverted = JsonWebKeyConverter.TryConvertToSecurityKey(theoryData.JsonWebKey, out SecurityKey securityKey); theoryData.ExpectedException.ProcessNoException(context); IdentityComparer.AreEqual(securityKey, theoryData.SecurityKey, context); if (theoryData.JsonWebKey.ConvertedSecurityKey.GetType() != theoryData.SecurityKey.GetType()) { context.AddDiff($"theoryData.JsonWebKey.RelatedSecurityKey.GetType(): '{theoryData.JsonWebKey.ConvertedSecurityKey.GetType()}' != theoryData.SecurityKey.GetType(): '{theoryData.SecurityKey.GetType()}'."); } } catch (Exception ex) { theoryData.ExpectedException.ProcessException(ex, context); } TestUtilities.AssertFailIfErrors(context); }
public void Constructors(X509EncryptingCredentialsTheoryData theoryData) { var context = TestUtilities.WriteHeader($"{this}.Constructors", theoryData); try { var encryptingCredentials = new X509EncryptingCredentials(theoryData.Certificate, theoryData.Alg, theoryData.Enc); var encryptingCredentialsFromCert = new X509EncryptingCredentials(theoryData.Certificate); IdentityComparer.AreEqual(encryptingCredentials.Certificate, encryptingCredentialsFromCert.Certificate, context); IdentityComparer.AreEqual(encryptingCredentials.Key, encryptingCredentialsFromCert.Key, context); IdentityComparer.AreEqual(encryptingCredentials.Certificate, encryptingCredentialsFromCert.Certificate, context); IdentityComparer.AreEqual(encryptingCredentials.Alg, encryptingCredentialsFromCert.Alg, context); IdentityComparer.AreEqual(encryptingCredentials.Enc, encryptingCredentialsFromCert.Enc, context); theoryData.ExpectedException.ProcessNoException(context); } catch (Exception exception) { theoryData.ExpectedException.ProcessException(exception, context); } TestUtilities.AssertFailIfErrors(context); }
public void ConvertX509SecurityKeyAsRsaSecurityKeyToJsonWebKey(JsonWebKeyConverterTheoryData theoryData) { var context = TestUtilities.WriteHeader($"{this}.ConvertX509SecurityKeyToJsonWebKeyTheoryData", theoryData); try { var convertedKey = JsonWebKeyConverter.ConvertFromX509SecurityKey(theoryData.SecurityKey as X509SecurityKey, theoryData.RepresentAsRsaKey); theoryData.ExpectedException.ProcessNoException(context); IdentityComparer.AreEqual(convertedKey, theoryData.JsonWebKey, context); var expectedConvertedKeyType = theoryData.RepresentAsRsaKey == true ? typeof(RsaSecurityKey) : typeof(X509SecurityKey); if (convertedKey.ConvertedSecurityKey.GetType() != expectedConvertedKeyType) { context.AddDiff($"convertedKey.ConvertedSecurityKey.GetType(): '{convertedKey.ConvertedSecurityKey.GetType()}' != expectedConvertedKeyType: '{expectedConvertedKeyType}'."); } } catch (Exception ex) { theoryData.ExpectedException.ProcessException(ex, context); } TestUtilities.AssertFailIfErrors(context); }
public void Publics() { TokenValidationParameters validationParameters = new TokenValidationParameters(); Type type = typeof(TokenValidationParameters); PropertyInfo[] properties = type.GetProperties(); if (properties.Length != 35) { Assert.True(false, "Number of properties has changed from 35 to: " + properties.Length + ", adjust tests"); } TokenValidationParameters actorValidationParameters = new TokenValidationParameters(); SecurityKey issuerSigningKey = KeyingMaterial.DefaultX509Key_Public_2048; SecurityKey issuerSigningKey2 = KeyingMaterial.RsaSecurityKey_2048; List <SecurityKey> issuerSigningKeys = new List <SecurityKey> { KeyingMaterial.DefaultX509Key_Public_2048, KeyingMaterial.RsaSecurityKey_2048 }; List <SecurityKey> issuerSigningKeysDup = new List <SecurityKey> { KeyingMaterial.DefaultX509Key_Public_2048, KeyingMaterial.RsaSecurityKey_2048 }; string validAudience = "ValidAudience"; List <string> validAudiences = new List <string> { validAudience }; string validIssuer = "ValidIssuer"; List <string> validIssuers = new List <string> { validIssuer }; TokenValidationParameters validationParametersInline = new TokenValidationParameters() { ActorValidationParameters = actorValidationParameters, AudienceValidator = ValidationDelegates.AudienceValidatorReturnsTrue, IssuerSigningKey = issuerSigningKey, IssuerSigningKeyResolver = (token, securityToken, keyIdentifier, tvp) => { return(new List <SecurityKey> { issuerSigningKey }); }, IssuerSigningKeys = issuerSigningKeys, IssuerValidator = ValidationDelegates.IssuerValidatorEcho, LifetimeValidator = ValidationDelegates.LifetimeValidatorReturnsTrue, SignatureValidator = ValidationDelegates.SignatureValidatorReturnsJwtTokenAsIs, SaveSigninToken = true, ValidateAudience = false, ValidateIssuer = false, ValidAudience = validAudience, ValidAudiences = validAudiences, ValidIssuer = validIssuer, ValidIssuers = validIssuers, }; Assert.True(object.ReferenceEquals(actorValidationParameters, validationParametersInline.ActorValidationParameters)); Assert.True(object.ReferenceEquals(validationParametersInline.IssuerSigningKey, issuerSigningKey)); Assert.True(validationParametersInline.SaveSigninToken); Assert.False(validationParametersInline.ValidateAudience); Assert.False(validationParametersInline.ValidateIssuer); Assert.True(object.ReferenceEquals(validationParametersInline.ValidAudience, validAudience)); Assert.True(object.ReferenceEquals(validationParametersInline.ValidAudiences, validAudiences)); Assert.True(object.ReferenceEquals(validationParametersInline.ValidIssuer, validIssuer)); TokenValidationParameters validationParametersSets = new TokenValidationParameters(); validationParametersSets.ActorValidationParameters = actorValidationParameters; validationParametersSets.AudienceValidator = ValidationDelegates.AudienceValidatorReturnsTrue; validationParametersSets.IssuerSigningKey = KeyingMaterial.DefaultX509Key_Public_2048; validationParametersSets.IssuerSigningKeyResolver = (token, securityToken, keyIdentifier, tvp) => { return(new List <SecurityKey> { issuerSigningKey2 }); }; validationParametersSets.IssuerSigningKeys = issuerSigningKeysDup; validationParametersSets.IssuerValidator = ValidationDelegates.IssuerValidatorEcho; validationParametersSets.LifetimeValidator = ValidationDelegates.LifetimeValidatorReturnsTrue; validationParametersSets.SignatureValidator = ValidationDelegates.SignatureValidatorReturnsJwtTokenAsIs; validationParametersSets.SaveSigninToken = true; validationParametersSets.ValidateAudience = false; validationParametersSets.ValidateIssuer = false; validationParametersSets.ValidAudience = validAudience; validationParametersSets.ValidAudiences = validAudiences; validationParametersSets.ValidIssuer = validIssuer; validationParametersSets.ValidIssuers = validIssuers; var compareContext = new CompareContext(); IdentityComparer.AreEqual(validationParametersInline, validationParametersSets, compareContext); TokenValidationParameters tokenValidationParametersCloned = validationParametersInline.Clone() as TokenValidationParameters; IdentityComparer.AreEqual(tokenValidationParametersCloned, validationParametersInline, compareContext); //tokenValidationParametersCloned.AudienceValidator(new string[]{"bob"}, JwtTestTokens.Simple(); string id = Guid.NewGuid().ToString(); DerivedTokenValidationParameters derivedValidationParameters = new DerivedTokenValidationParameters(id, validationParametersInline); DerivedTokenValidationParameters derivedValidationParametersCloned = derivedValidationParameters.Clone() as DerivedTokenValidationParameters; IdentityComparer.AreEqual(derivedValidationParameters, derivedValidationParametersCloned, compareContext); IdentityComparer.AreEqual(derivedValidationParameters.InternalString, derivedValidationParametersCloned.InternalString, compareContext); TestUtilities.AssertFailIfErrors("TokenValidationParameters", compareContext.Diffs); }
public void Constructor() { var context = new CompareContext(); var expectedException = new ExpectedException(typeExpected: typeof(ArgumentNullException), substringExpected: "certificate"); try { new X509SecurityKey((X509Certificate2)null); expectedException.ProcessNoException(context); } catch (Exception exception) { expectedException.ProcessException(exception, context); } var certificate = KeyingMaterial.DefaultCert_2048; expectedException = new ExpectedException(typeExpected: typeof(ArgumentNullException), substringExpected: "keyId"); try { new X509SecurityKey(certificate, null); expectedException.ProcessNoException(context); } catch (Exception exception) { expectedException.ProcessException(exception, context); } try { new X509SecurityKey(certificate, string.Empty); expectedException.ProcessNoException(context); } catch (Exception exception) { expectedException.ProcessException(exception, context); } expectedException = ExpectedException.NoExceptionExpected; try { var x509SecurityKey = new X509SecurityKey(certificate); IdentityComparer.AreEqual(x509SecurityKey.KeyId, certificate.Thumbprint, context); IdentityComparer.AreEqual(x509SecurityKey.X5t, Base64UrlEncoder.Encode(certificate.GetCertHash()), context); IdentityComparer.AreEqual(certificate, x509SecurityKey.Certificate, context); } catch (Exception exception) { expectedException.ProcessException(exception, context); } try { var x509SecurityKey = new X509SecurityKey(certificate, "KID"); IdentityComparer.AreEqual(x509SecurityKey.KeyId, "KID", context); IdentityComparer.AreEqual(x509SecurityKey.X5t, Base64UrlEncoder.Encode(certificate.GetCertHash()), context); IdentityComparer.AreEqual(certificate, x509SecurityKey.Certificate, context); } catch (Exception exception) { expectedException.ProcessException(exception, context); } TestUtilities.AssertFailIfErrors(context); }
public void Publics() { TokenValidationParameters validationParameters = new TokenValidationParameters(); Type type = typeof(TokenValidationParameters); PropertyInfo[] properties = type.GetProperties(); if (properties.Length != 43) { Assert.True(false, "Number of properties has changed from 43 to: " + properties.Length + ", adjust tests"); } TokenValidationParameters actorValidationParameters = new TokenValidationParameters(); SecurityKey issuerSigningKey = KeyingMaterial.DefaultX509Key_2048_Public; SecurityKey issuerSigningKey2 = KeyingMaterial.RsaSecurityKey_2048; List <SecurityKey> issuerSigningKeys = new List <SecurityKey> { KeyingMaterial.DefaultX509Key_2048_Public, KeyingMaterial.RsaSecurityKey_2048 }; List <SecurityKey> issuerSigningKeysDup = new List <SecurityKey> { KeyingMaterial.DefaultX509Key_2048_Public, KeyingMaterial.RsaSecurityKey_2048 }; string validAudience = "ValidAudience"; List <string> validAudiences = new List <string> { validAudience }; string validIssuer = "ValidIssuer"; List <string> validIssuers = new List <string> { validIssuer }; var propertyBag = new Dictionary <string, Object> { { "CustomKey", "CustomValue" } }; TypeValidator typeValidator = (typ, token, parameters) => "ActualType"; AlgorithmValidator algorithmValidator = ValidationDelegates.AlgorithmValidatorBuilder(false); var validTypes = new List <string> { "ValidType1", "ValidType2", "ValidType3" }; var validAlgorithms = new List <string> { "RSA2048", "RSA1024" }; TokenValidationParameters validationParametersInline = new TokenValidationParameters() { AlgorithmValidator = algorithmValidator, ActorValidationParameters = actorValidationParameters, AudienceValidator = ValidationDelegates.AudienceValidatorReturnsTrue, IssuerSigningKey = issuerSigningKey, IssuerSigningKeyResolver = (token, securityToken, keyIdentifier, tvp) => { return(new List <SecurityKey> { issuerSigningKey }); }, IssuerSigningKeys = issuerSigningKeys, IssuerValidator = ValidationDelegates.IssuerValidatorEcho, LifetimeValidator = ValidationDelegates.LifetimeValidatorReturnsTrue, PropertyBag = propertyBag, SignatureValidator = ValidationDelegates.SignatureValidatorReturnsJwtTokenAsIs, SaveSigninToken = true, TypeValidator = typeValidator, ValidAlgorithms = validAlgorithms, ValidateAudience = false, ValidateIssuer = false, ValidAudience = validAudience, ValidAudiences = validAudiences, ValidIssuer = validIssuer, ValidIssuers = validIssuers, ValidTypes = validTypes }; Assert.True(object.ReferenceEquals(actorValidationParameters, validationParametersInline.ActorValidationParameters)); Assert.True(object.ReferenceEquals(validationParametersInline.IssuerSigningKey, issuerSigningKey)); Assert.True(object.ReferenceEquals(validationParametersInline.PropertyBag, propertyBag)); Assert.True(validationParametersInline.SaveSigninToken); Assert.False(validationParametersInline.ValidateAudience); Assert.False(validationParametersInline.ValidateIssuer); Assert.True(object.ReferenceEquals(validationParametersInline.ValidAlgorithms, validAlgorithms)); Assert.True(object.ReferenceEquals(validationParametersInline.AlgorithmValidator, algorithmValidator)); Assert.True(object.ReferenceEquals(validationParametersInline.TypeValidator, typeValidator)); Assert.True(object.ReferenceEquals(validationParametersInline.ValidAudience, validAudience)); Assert.True(object.ReferenceEquals(validationParametersInline.ValidAudiences, validAudiences)); Assert.True(object.ReferenceEquals(validationParametersInline.ValidIssuer, validIssuer)); Assert.True(validationParametersInline.IgnoreTrailingSlashWhenValidatingAudience); TokenValidationParameters validationParametersSets = new TokenValidationParameters(); validationParametersSets.AlgorithmValidator = algorithmValidator; validationParametersSets.ActorValidationParameters = actorValidationParameters; validationParametersSets.AudienceValidator = ValidationDelegates.AudienceValidatorReturnsTrue; validationParametersSets.IssuerSigningKey = KeyingMaterial.DefaultX509Key_2048_Public; validationParametersSets.IssuerSigningKeyResolver = (token, securityToken, keyIdentifier, tvp) => { return(new List <SecurityKey> { issuerSigningKey2 }); }; validationParametersSets.IssuerSigningKeys = issuerSigningKeysDup; validationParametersSets.IssuerValidator = ValidationDelegates.IssuerValidatorEcho; validationParametersSets.LifetimeValidator = ValidationDelegates.LifetimeValidatorReturnsTrue; validationParametersSets.PropertyBag = propertyBag; validationParametersSets.SignatureValidator = ValidationDelegates.SignatureValidatorReturnsJwtTokenAsIs; validationParametersSets.SaveSigninToken = true; validationParametersSets.TypeValidator = typeValidator; validationParametersSets.ValidateAudience = false; validationParametersSets.ValidateIssuer = false; validationParametersSets.ValidAlgorithms = validAlgorithms; validationParametersSets.ValidAudience = validAudience; validationParametersSets.ValidAudiences = validAudiences; validationParametersSets.ValidIssuer = validIssuer; validationParametersSets.ValidIssuers = validIssuers; validationParametersSets.ValidTypes = validTypes; var compareContext = new CompareContext(); IdentityComparer.AreEqual(validationParametersInline, validationParametersSets, compareContext); IdentityComparer.AreEqual(validationParametersInline.Clone() as TokenValidationParameters, validationParametersInline, compareContext); string id = Guid.NewGuid().ToString(); DerivedTokenValidationParameters derivedValidationParameters = new DerivedTokenValidationParameters(id, validationParametersInline); DerivedTokenValidationParameters derivedValidationParametersCloned = derivedValidationParameters.Clone() as DerivedTokenValidationParameters; IdentityComparer.AreEqual(derivedValidationParameters, derivedValidationParametersCloned, compareContext); IdentityComparer.AreEqual(derivedValidationParameters.InternalString, derivedValidationParametersCloned.InternalString, compareContext); TestUtilities.AssertFailIfErrors(compareContext); }