コード例 #1
0
ファイル: GenerateKey_Tests.cs プロジェクト: bencgreen/jeebs
    public void GenerateEncryptingKey_Returns_Key_Of_Encrypting_Key_Length()
    {
        // Arrange

        // Act
        var result = JwtF.GenerateEncryptingKey();

        // Assert
        Assert.Equal(JwtSecurity.EncryptingKeyBytes, result.Length);
    }
コード例 #2
0
    public void Expired_Returns_None_With_TokenHasExpiredMsg()
    {
        // Arrange
        var(config, token, _) = GetToken(false, DateTime.UtcNow.AddHours(-1), DateTime.UtcNow.AddMinutes(-30));

        // Act
        var result = JwtF.ValidateToken(config, token);

        // Assert
        result.AssertNone().AssertType <TokenHasExpiredMsg>();
    }
コード例 #3
0
ファイル: GetToken_Tests.cs プロジェクト: bencgreen/jeebs
    public void Invalid_Authorization_Header_Returns_None_With_InvalidAuthorisationHeaderMsg()
    {
        // Arrange
        var header = Rnd.Str;

        // Act
        var result = JwtF.GetToken(header);

        // Assert
        result.AssertNone().AssertType <InvalidAuthorisationHeaderMsg>();
    }
コード例 #4
0
    public void Not_Valid_Yet_Returns_None_With_TokenIsNotValidYetMsg()
    {
        // Arrange
        var(config, token, _) = GetToken(false, DateTime.UtcNow.AddHours(1), DateTime.UtcNow.AddHours(1));

        // Act
        var result = JwtF.ValidateToken(config, token);

        // Assert
        result.AssertNone().AssertType <TokenIsNotValidYetMsg>();
    }
コード例 #5
0
    public void Missing_Header_Returns_None_With_MissingAuthorisationHeaderMsg()
    {
        // Arrange
        var headers = new Dictionary <string, StringValues>();

        // Act
        var result = JwtF.GetAuthorisationHeader(headers);

        // Assert
        result.AssertNone().AssertType <MissingAuthorisationHeaderMsg>();
    }
コード例 #6
0
    public void GetPrincipal_Calls_Auth_ValidateToken()
    {
        // Arrange
        var auth  = Substitute.For <IAuthJwtProvider>();
        var value = Rnd.Str;

        // Act
        _ = JwtF.GetPrincipal(auth, value);

        // Assert
        auth.Received().ValidateToken(value);
    }
コード例 #7
0
ファイル: CreateToken_Tests.cs プロジェクト: bencgreen/jeebs
    public void Identity_Not_Authenticated_Returns_None_With_IdentityNotAuthenticatedMsg()
    {
        // Arrange
        var config    = new JwtConfig();
        var principal = Substitute.For <ClaimsPrincipal>();

        // Act
        var result = JwtF.CreateToken(config, principal);

        // Assert
        result.AssertNone().AssertType <IdentityNotAuthenticatedMsg>();
    }
コード例 #8
0
    public void Valid_Token_With_Encryption_Returns_Principal()
    {
        // Arrange
        var(config, token, name) = GetToken(true, DateTime.UtcNow, DateTime.UtcNow.AddHours(1));

        // Act
        var result = JwtF.ValidateToken(config, token);

        // Assert
        var some = result.AssertSome();

        Assert.Equal(name, some.Identity?.Name);
    }
コード例 #9
0
ファイル: GenerateKey_Tests.cs プロジェクト: bencgreen/jeebs
    public void GenerateEncryptingKey_Returns_Key_With_All_Character_Classes()
    {
        // Arrange

        // Act
        var result = JwtF.GenerateEncryptingKey();

        // Assert
        Assert.False(result.All(c => Rnd.StringF.LowercaseChars.Contains(c)));
        Assert.False(result.All(c => Rnd.StringF.UppercaseChars.Contains(c)));
        Assert.False(result.All(c => Rnd.StringF.NumberChars.Contains(c)));
        Assert.False(result.All(c => Rnd.StringF.SpecialChars.Contains(c)));
        Assert.True(result.All(c => Rnd.StringF.AllChars.Contains(c)));
    }
コード例 #10
0
ファイル: CreateToken_Tests.cs プロジェクト: bencgreen/jeebs
    public void Identity_Null_Returns_None_With_NullIdentityMsg()
    {
        // Arrange
        var config    = new JwtConfig();
        var principal = Substitute.For <ClaimsPrincipal>();

        principal.Identity.Returns(_ => null);

        // Act
        var result = JwtF.CreateToken(config, principal);

        // Assert
        result.AssertNone().AssertType <NullIdentityMsg>();
    }
コード例 #11
0
ファイル: GetToken_Tests.cs プロジェクト: bencgreen/jeebs
    public void Returns_Token()
    {
        // Arrange
        var value  = Rnd.Str;
        var header = $"Bearer {value}";

        // Act
        var result = JwtF.GetToken(header);

        // Assert
        var some = result.AssertSome();

        Assert.Equal(value, some);
    }
コード例 #12
0
ファイル: CreateToken_Tests.cs プロジェクト: bencgreen/jeebs
    public void Invalid_Config_Returns_None_With_JwtConfigInvalidMsg()
    {
        // Arrange
        var config   = new JwtConfig();
        var identity = Substitute.For <IIdentity>();

        identity.IsAuthenticated.Returns(true);
        var principal = Substitute.For <ClaimsPrincipal>();

        principal.Identity.Returns(identity);

        // Act
        var result = JwtF.CreateToken(config, principal);

        // Assert
        result.AssertNone().AssertType <ConfigInvalidMsg>();
    }
コード例 #13
0
    public void Returns_Authorization_Header()
    {
        // Arrange
        var value   = Rnd.Str;
        var headers = new Dictionary <string, StringValues>
        {
            { "Authorization", value }
        };

        // Act
        var result = JwtF.GetAuthorisationHeader(headers);

        // Assert
        var some = result.AssertSome();

        Assert.Equal(value, some);
    }
コード例 #14
0
    private static (JwtConfig config, string token, string user) GetToken(bool encrypt, DateTime notBefore, DateTime expires)
    {
        var config = encrypt switch
        {
            true =>
            new JwtConfig
            {
                SigningKey    = Rnd.StringF.Get(32),
                EncryptingKey = Rnd.StringF.Get(64),
                Issuer        = Rnd.Str,
                Audience      = Rnd.Str
            },

            false =>
            new JwtConfig
            {
                SigningKey = Rnd.StringF.Get(32),
                Issuer     = Rnd.Str,
                Audience   = Rnd.Str
            }
        };

        var name     = Rnd.Str;
        var identity = Substitute.For <IIdentity>();

        identity.IsAuthenticated.Returns(true);
        identity.Name.Returns(name);
        var principal = Substitute.For <ClaimsPrincipal>();

        principal.Identity.Returns(identity);

        var token = JwtF.CreateToken(
            config,
            principal,
            notBefore,
            expires
            ).Unwrap(
            () => throw new Exception("Error creating token.")
            );

        return(config, token, name);
    }
コード例 #15
0
ファイル: CreateToken_Tests.cs プロジェクト: bencgreen/jeebs
    public void SigningKey_Not_Long_Enough_Returns_None_With_SigningKeyNotLongEnoughMsg()
    {
        // Arrange
        var config = new JwtConfig
        {
            SigningKey = Rnd.Str,
            Issuer     = Rnd.Str,
            Audience   = Rnd.Str
        };
        var identity = Substitute.For <IIdentity>();

        identity.IsAuthenticated.Returns(true);
        var principal = Substitute.For <ClaimsPrincipal>();

        principal.Identity.Returns(identity);

        // Act
        var result = JwtF.CreateToken(config, principal);

        // Assert
        result.AssertNone().AssertType <SigningKeyNotLongEnoughMsg>();
    }
コード例 #16
0
ファイル: CreateToken_Tests.cs プロジェクト: bencgreen/jeebs
    public void Valid_Config_Without_Encryption_Returns_Token()
    {
        // Arrange
        var config = new JwtConfig
        {
            SigningKey = Rnd.StringF.Get(32),
            Issuer     = Rnd.Str,
            Audience   = Rnd.Str
        };
        var identity = Substitute.For <IIdentity>();

        identity.IsAuthenticated.Returns(true);
        var principal = Substitute.For <ClaimsPrincipal>();

        principal.Identity.Returns(identity);

        // Act
        var result = JwtF.CreateToken(config, principal);

        // Assert
        result.AssertSome();
    }