public LevelConfigurationFunctions()
        {
            var issuerToken = Environment.GetEnvironmentVariable("IssuerToken");
            var audience    = Environment.GetEnvironmentVariable("Audience");
            var issuer      = Environment.GetEnvironmentVariable("Issuer");

            _tokenCreator  = new AccessTokenCreator(issuerToken, audience, issuer);
            _tokenProvider = new AccessTokenProvider(issuerToken, audience, issuer);
        }
        public void CreateTokenTest()
        {
            // poco mock object
            var userId          = 1;
            var userIdSalt      = new byte[24];
            var tokenSalt       = new byte[24];
            var guid            = new Guid("892821c7-ea89-40b7-abe0-2c8c4a521349");
            var encryptedGuid   = "encrypted-guid";
            var encryptedUserId = "dummy-encrypted-user-id";
            var accessToken     = new AccessToken();
            var issuedAt        = new DateTime(2014, 11, 21, 14, 55, 33);

            var hashedToken = new PasswordHash.HashInfo
            {
                Hash       = encryptedGuid,
                Iterations = 1000,
                Method     = "sha1",
                Salt       = Convert.ToBase64String(tokenSalt)
            };


            // declare mocks
            var mockContainer    = MockRepository.GenerateStub <IContainer>();
            var mockPasswordHash = MockRepository.GenerateStub <IPasswordHash>();
            var mockTokenStorage = MockRepository.GenerateStub <ITokenStorage>();
            var mockDateHelper   = MockRepository.GenerateStub <IDateHelper>();
            var mockOpenGuid     = MockRepository.GenerateStub <IOpenGuid>();
            var mockEcrypter     = MockRepository.GenerateStub <IEncrypter>();

            // stub all mock calls
            mockContainer.Stub(x => x.GetInstance <IAccessToken>()).Return(accessToken);
            mockContainer.Stub(x => x.GetInstance <IPasswordHash>()).Return(mockPasswordHash);
            mockOpenGuid.Stub(x => x.New()).Return(guid);
            mockPasswordHash.Stub(x => x.CreateHash(guid.ToString())).Return(hashedToken);
            mockEcrypter.Stub(x => x.GetSalt()).Return(userIdSalt);
            mockEcrypter.Stub(x => x.Encrypt("1", userIdSalt)).Return(encryptedUserId);
            mockTokenStorage.Stub(x => x.StoreToken(userId, hashedToken, encryptedUserId, userIdSalt, issuedAt)).Return(true);
            mockDateHelper.Stub(x => x.Now).Return(issuedAt);

            // create test object and call test method
            var accessTokenCreator = new AccessTokenCreator(mockContainer, mockTokenStorage, mockEcrypter, mockDateHelper, mockOpenGuid);
            var accessTokenResult  = accessTokenCreator.Create(1);

            // verify stub methods are called
            mockContainer.AssertWasCalled(x => x.GetInstance <IAccessToken>());
            mockContainer.AssertWasCalled(x => x.GetInstance <IPasswordHash>());
            mockOpenGuid.AssertWasCalled(x => x.New());
            mockPasswordHash.AssertWasCalled(x => x.CreateHash(guid.ToString()));
            mockEcrypter.AssertWasCalled(x => x.GetSalt());
            mockEcrypter.AssertWasCalled(x => x.Encrypt("1", userIdSalt));
            mockTokenStorage.AssertWasCalled(x => x.StoreToken(userId, hashedToken, encryptedUserId, userIdSalt, issuedAt));

            // asserts
            Assert.AreEqual(encryptedGuid, accessTokenResult.Token);
            Assert.AreEqual(issuedAt, accessTokenResult.IssuedAt);
        }
示例#3
0
        public OrganisationInviteFunctions()
        {
            //var issuerToken = Environment.GetEnvironmentVariable("IssuerToken");
            //var audience = Environment.GetEnvironmentVariable("Audience");
            //var issuer = Environment.GetEnvironmentVariable("Issuer");

            var issuerToken = TemporaryEnvironmentVariables.GetIssuerToken();
            var audience    = TemporaryEnvironmentVariables.GetAudience();
            var issuer      = TemporaryEnvironmentVariables.GetIssuer();

            _tokenCreator  = new AccessTokenCreator(issuerToken, audience, issuer);
            _tokenProvider = new AccessTokenProvider(issuerToken, audience, issuer);
        }
        public void CreateTokenUnknownExceptionTest()
        {
            // poco mock object
            var userIdSalt      = new byte[24];
            var tokenSalt       = new byte[24];
            var guid            = new Guid("892821c7-ea89-40b7-abe0-2c8c4a521349");
            var encryptedGuid   = "encrypted-guid";
            var encryptedUserId = "dummy-encrypted-user-id";
            var accessToken     = new AccessToken();
            var hashedToken     = new PasswordHash.HashInfo
            {
                Hash       = encryptedGuid,
                Iterations = 1000,
                Method     = "sha1",
                Salt       = Convert.ToBase64String(tokenSalt)
            };


            // declare mocks
            var mockContainer    = MockRepository.GenerateStub <IContainer>();
            var mockPasswordHash = MockRepository.GenerateStub <IPasswordHash>();
            var mockTokenStorage = MockRepository.GenerateStub <ITokenStorage>();
            var mockDateHelper   = MockRepository.GenerateStub <IDateHelper>();
            var mockOpenGuid     = MockRepository.GenerateStub <IOpenGuid>();
            var mockEcrypter     = MockRepository.GenerateStub <IEncrypter>();

            // stub all mock calls
            mockContainer.Stub(x => x.GetInstance <IAccessToken>()).Return(accessToken);
            mockContainer.Stub(x => x.GetInstance <IPasswordHash>()).Return(mockPasswordHash);
            mockOpenGuid.Stub(x => x.New()).Return(guid);
            mockPasswordHash.Stub(x => x.CreateHash(guid.ToString())).Throw(new Exception("Unknown exception"));

            // create test object and call test method
            var accessTokenCreator = new AccessTokenCreator(mockContainer, mockTokenStorage, mockEcrypter, mockDateHelper, mockOpenGuid);

            Assert.Throws <Exception>(() => accessTokenCreator.Create(1));

            // verify stub methods are called
            // verify stub methods are called
            mockContainer.AssertWasCalled(x => x.GetInstance <IAccessToken>());
            mockContainer.AssertWasCalled(x => x.GetInstance <IPasswordHash>());
            mockOpenGuid.AssertWasCalled(x => x.New());
            mockPasswordHash.AssertWasCalled(x => x.CreateHash(guid.ToString()));
        }
示例#5
0
        public void TestTokenFailedValidation()
        {
            // Arrange
            var key      = "0844AB5B0222F2E5D497BAC5FAF6CCD573E1C8BF1DF267F5B507F8EC985578D8";
            var audience = "https://localhost:7071";
            var issuer   = "MyAudience";

            var tokenCreator = new AccessTokenCreator(key, audience, issuer);
            var newToken     = tokenCreator.CreateToken(Guid.NewGuid());

            key = "0844AB5B0222F2E5D497BAC5FAF6CCD573E1C8BF1DF267F5B507F8EC985578D7";

            // Act
            bool validated = false;

            try
            {
                // Create the parameters
                var tokenParams = new TokenValidationParameters()
                {
                    RequireSignedTokens      = true,
                    ValidAudience            = audience,
                    ValidateAudience         = true,
                    ValidIssuer              = issuer,
                    ValidateIssuer           = true,
                    ValidateIssuerSigningKey = true,
                    ValidateLifetime         = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(key))
                };

                // Validate the token
                var handler = new JwtSecurityTokenHandler();
                var result  = handler.ValidateToken(newToken, tokenParams, out var securityToken);
                validated = true;
            }
            catch (Exception ex)
            {
                validated = false;
            }

            //Assert
            Assert.False(validated);
        }
        public void ReAuthenticateFailsTest()
        {
            // poco mock object
            var userId           = 1;
            var userIdSalt       = new byte[24];
            var tokenSalt        = new byte[24];
            var guid             = new Guid("892821c7-ea89-40b7-abe0-2c8c4a521349");
            var guid2            = new Guid("792821c7-ea89-40b7-abe0-2c8c4a521349");
            var encryptedGuid    = "encrypted-guid";
            var encryptedGuid2   = "encrypted-guid2";
            var encryptedUserId  = "dummy-encrypted-user-id";
            var encryptedUserId2 = "dummy-encrypted-user-id2";
            var accessToken      = new AccessToken();
            var accessToken2     = new AccessToken();
            var issuedAt         = new DateTime(2014, 11, 21, 13, 55, 33);
            var now = new DateTime(2014, 11, 21, 14, 55, 33);

            var hashedToken = new PasswordHash.HashInfo
            {
                Hash       = encryptedGuid,
                Iterations = 1000,
                Method     = "sha1",
                Salt       = Convert.ToBase64String(tokenSalt)
            };

            var hashedToken2 = new PasswordHash.HashInfo
            {
                Hash       = encryptedGuid2,
                Iterations = 1000,
                Method     = "sha1",
                Salt       = Convert.ToBase64String(tokenSalt)
            };

            // declare mocks
            var mockContainer    = MockRepository.GenerateStub <IContainer>();
            var mockPasswordHash = MockRepository.GenerateStub <IPasswordHash>();
            var mockTokenStorage = MockRepository.GenerateStub <ITokenStorage>();
            var mockDateHelper   = MockRepository.GenerateStub <IDateHelper>();
            var mockOpenGuid     = MockRepository.GenerateStub <IOpenGuid>();
            var mockEcrypter     = MockRepository.GenerateStub <IEncrypter>();

            string   tokenIdOut;
            var      issuedAtOutRef = new DateTime(2014, 11, 21, 13, 55, 33);
            var      refreshedOutRef = new DateTime(2014, 11, 21, 13, 55, 33);
            DateTime issuedAtOut, refreshedOut;

            // stub all mock calls
            mockContainer.Stub(x => x.GetInstance <IAccessToken>()).Return(accessToken).Repeat.Once();
            mockContainer.Stub(x => x.GetInstance <IPasswordHash>()).Return(mockPasswordHash).Repeat.Times(2);

            mockTokenStorage.Stub(x => x.VerifyTokenExistence(userId, out tokenIdOut, out issuedAtOut, out refreshedOut))
            .OutRef(new object[] { encryptedUserId, issuedAtOutRef, refreshedOutRef })
            .Return(false).Repeat.Once();
            mockOpenGuid.Stub(x => x.New()).Return(guid).Repeat.Once();
            mockPasswordHash.Stub(x => x.CreateHash(guid.ToString())).Return(hashedToken).Repeat.Once();
            mockEcrypter.Stub(x => x.GetSalt()).Return(userIdSalt).Repeat.Once();
            mockEcrypter.Stub(x => x.Encrypt("1", userIdSalt)).Return(encryptedUserId).Repeat.Once();
            mockDateHelper.Stub(x => x.Now).Return(issuedAt).Repeat.Once();
            mockTokenStorage.Stub(x => x.StoreToken(userId, hashedToken, encryptedUserId, userIdSalt, issuedAt)).Return(true).Repeat.Once();

            mockContainer.Stub(x => x.GetInstance <IAccessToken>()).Return(accessToken2).Repeat.Once();
            mockTokenStorage.Stub(x => x.VerifyTokenExistence(userId, out tokenIdOut, out issuedAtOut, out refreshedOut))
            .OutRef(new object[] { encryptedUserId, issuedAtOutRef, refreshedOutRef })
            .Return(true).Repeat.Once();
            mockDateHelper.Stub(x => x.IsWithinTimeOutLimit(refreshedOutRef)).Return(false).Repeat.Once();
            mockDateHelper.Stub(x => x.Now).Return(now).Repeat.Once();
            mockOpenGuid.Stub(x => x.New()).Return(guid2).Repeat.Once();
            mockPasswordHash.Stub(x => x.CreateHash(guid2.ToString())).Return(hashedToken2).Repeat.Once();
            mockEcrypter.Stub(x => x.GetSalt()).Return(userIdSalt).Repeat.Once();
            mockEcrypter.Stub(x => x.Encrypt("1", userIdSalt)).Return(encryptedUserId2).Repeat.Once();
            mockDateHelper.Stub(x => x.Now).Return(now).Repeat.Once();
            mockTokenStorage.Stub(x => x.StoreToken(userId, hashedToken2, encryptedUserId2, userIdSalt, now)).Return(true).Repeat.Once();

            // create test object and call test method
            var accessTokenCreator = new AccessTokenCreator(mockContainer, mockTokenStorage, mockEcrypter, mockDateHelper, mockOpenGuid);
            var accessTokenResult  = accessTokenCreator.Create(1);

            // verify stub methods are called
            mockContainer.AssertWasCalled(x => x.GetInstance <IAccessToken>());
            mockContainer.AssertWasCalled(x => x.GetInstance <IPasswordHash>());
            mockTokenStorage.AssertWasCalled(x => x.VerifyTokenExistence(userId, out tokenIdOut, out issuedAtOut, out refreshedOut));
            mockOpenGuid.AssertWasCalled(x => x.New());
            mockPasswordHash.AssertWasCalled(x => x.CreateHash(guid.ToString()));
            mockEcrypter.AssertWasCalled(x => x.GetSalt());
            mockEcrypter.AssertWasCalled(x => x.Encrypt("1", userIdSalt));
            mockTokenStorage.AssertWasCalled(x => x.StoreToken(userId, hashedToken, encryptedUserId, userIdSalt, issuedAt));

            // asserts
            Assert.AreEqual(encryptedGuid, accessTokenResult.Token);
            Assert.AreEqual(issuedAt, accessTokenResult.IssuedAt);

            var accessTokenResult2 = accessTokenCreator.Create(1);

            // verify stub methods are called
            mockContainer.AssertWasCalled(x => x.GetInstance <IAccessToken>());
            mockContainer.AssertWasCalled(x => x.GetInstance <IPasswordHash>());
            mockTokenStorage.AssertWasCalled(x => x.VerifyTokenExistence(userId, out tokenIdOut, out issuedAtOut, out refreshedOut));
            mockOpenGuid.AssertWasCalled(x => x.New());
            mockPasswordHash.AssertWasCalled(x => x.CreateHash(guid2.ToString()));
            mockEcrypter.AssertWasCalled(x => x.GetSalt());
            mockEcrypter.AssertWasCalled(x => x.Encrypt("1", userIdSalt));
            mockTokenStorage.AssertWasCalled(x => x.StoreToken(userId, hashedToken2, encryptedUserId2, userIdSalt, now));

            mockOpenGuid.VerifyAllExpectations();

            Assert.AreNotEqual(accessTokenResult2.Token, accessTokenResult.Token);
            Assert.AreNotEqual(accessTokenResult2.IssuedAt, accessTokenResult.IssuedAt);

            Assert.AreEqual(encryptedGuid2, accessTokenResult2.Token);
            Assert.AreEqual(now, accessTokenResult2.IssuedAt);
        }