public async Task InvalidAudienceThrowsSecurityTokenInvalidAudienceException()
    {
        audience = "777";

        var keys = new List <SecurityKey>();

        byte[] exponent      = Base64UrlDecoder(e);
        byte[] modulus       = Base64UrlDecoder(n);
        var    rsaParameters = new RSAParameters {
            Exponent = Base64UrlDecoder(e), Modulus = Base64UrlDecoder(n)
        };
        var rsaSecurityKey = new RsaSecurityKey(rsaParameters)
        {
            KeyId = kid
        };

        keys.Add(rsaSecurityKey);
        _discoveryDocument.SetupGet(d => d.SigningKeys).Returns(keys);

        var validator = new OpenIdConnectTokenValidator();

        try
        {
            bool result = validator.ValidateOpenIdConnectJSONWebToken(token, issuer, audience, nonce, _discoveryDocument.Object, false);
        }
        catch (Exception exception)
        {
            Assert.IsTrue(exception is SecurityTokenInvalidAudienceException);
        }
    }
    public async Task InvalidTokenThrowsArgumentException()
    {
        token = "7.7.7";

        // Need the keys array to get passed validationParameters = new TokenValidationParameters() { ... }
        // and execute ValidateToken(token, validationParameters, out rawValidatedToken)
        var keys = new List <SecurityKey>();

        byte[] exponent      = Base64UrlDecoder(e);
        byte[] modulus       = Base64UrlDecoder(n);
        var    rsaParameters = new RSAParameters {
            Exponent = Base64UrlDecoder(e), Modulus = Base64UrlDecoder(n)
        };
        var rsaSecurityKey = new RsaSecurityKey(rsaParameters)
        {
            KeyId = kid
        };

        keys.Add(rsaSecurityKey);
        _discoveryDocument.SetupGet(d => d.SigningKeys).Returns(keys);

        var validator = new OpenIdConnectTokenValidator();

        try
        {
            bool result = validator.ValidateOpenIdConnectJSONWebToken(token, issuer, audience, nonce, _discoveryDocument.Object, false);
        }
        catch (Exception exception)
        {
            Assert.IsTrue(exception is ArgumentException);
        }
    }
    public async Task InvalidNonceThrowsSecurityTokenValidationException()
    {
        // The real nonce is found in the token, just make this any other value
        nonce = "777";

        var keys = new List <SecurityKey>();

        byte[] exponent      = Base64UrlDecoder(e);
        byte[] modulus       = Base64UrlDecoder(n);
        var    rsaParameters = new RSAParameters {
            Exponent = Base64UrlDecoder(e), Modulus = Base64UrlDecoder(n)
        };
        var rsaSecurityKey = new RsaSecurityKey(rsaParameters)
        {
            KeyId = kid
        };

        keys.Add(rsaSecurityKey);
        _discoveryDocument.SetupGet(d => d.SigningKeys).Returns(keys);

        var validator = new OpenIdConnectTokenValidator();

        bool result = validator.ValidateOpenIdConnectJSONWebToken(token, issuer, audience, nonce, _discoveryDocument.Object, false);

        Assert.AreEqual(false, result);
    }
    public async Task NoKeysReturnsFalse()
    {
        var keys = new List <SecurityKey>();

        _discoveryDocument.SetupGet(d => d.SigningKeys).Returns(keys);

        var  validator = new OpenIdConnectTokenValidator();
        bool result    = validator.ValidateOpenIdConnectJSONWebToken(token, issuer, audience, nonce, _discoveryDocument.Object, false);

        Assert.AreEqual(false, result);
    }
    public async Task NullDiscoveryDocumentThrowsArgumentNullException()
    {
        var keys = new List <SecurityKey>();

        _discoveryDocument.SetupGet(d => d.SigningKeys).Returns(keys);

        var validator = new OpenIdConnectTokenValidator();

        try
        {
            bool result = validator.ValidateOpenIdConnectJSONWebToken(token, issuer, audience, nonce, null, false);
        }
        catch (Exception exception)
        {
            Assert.IsTrue(exception is ArgumentNullException);
        }
    }
    public async Task ValidKeyReturnsTrue()
    {
        var keys = new List <SecurityKey>();

        byte[] exponent      = Base64UrlDecoder(e);
        byte[] modulus       = Base64UrlDecoder(n);
        var    rsaParameters = new RSAParameters {
            Exponent = Base64UrlDecoder(e), Modulus = Base64UrlDecoder(n)
        };
        var rsaSecurityKey = new RsaSecurityKey(rsaParameters)
        {
            KeyId = kid
        };

        keys.Add(rsaSecurityKey);
        _discoveryDocument.SetupGet(d => d.SigningKeys).Returns(keys);

        var  validator = new OpenIdConnectTokenValidator();
        bool result    = validator.ValidateOpenIdConnectJSONWebToken(token, issuer, audience, nonce, _discoveryDocument.Object, false);

        Assert.AreEqual(true, result);
    }