Ejemplo n.º 1
0
        public static async Task AddAuthenticationInfo_WithRequestAndAuthInfo_WillAddCorrectInformation(string method)
        {
            // Arrange
            var testData = await method.FromResourceV2();

            var expectedMAuthHeader = testData.MAuthHeaderV2;
            var version             = MAuthVersion.MWSV2;
            var mAuthCore           = new MAuthCoreV2();

            var authInfo = new PrivateKeyAuthenticationInfo()
            {
                ApplicationUuid = testData.ApplicationUuid,
                SignedTime      = testData.SignedTime,
                PrivateKey      = TestExtensions.ClientPrivateKey
            };

            // Act
            var actual = await mAuthCore.AddAuthenticationInfo(testData.ToHttpRequestMessage(version), authInfo);

            // Assert
            Assert.Equal(expectedMAuthHeader, actual.Headers.GetFirstValueOrDefault <string>(Constants.MAuthHeaderKeyV2));
            Assert.Equal(
                authInfo.SignedTime.ToUnixTimeSeconds(),
                actual.Headers.GetFirstValueOrDefault <long>(Constants.MAuthTimeHeaderKeyV2)
                );
        }
Ejemplo n.º 2
0
        public static async Task GetSignature_WithRequest_WillReturnTheCorrectSignature(string method)
        {
            // Arrange
            var testData = await method.FromResourceV2();

            var version     = MAuthVersion.MWSV2;
            var mAuthCore   = new MAuthCoreV2();
            var queryParams = !string.IsNullOrEmpty(testData.Url.Query) ?
                              testData.Url.Query.Replace("?", "").BuildEncodedQueryParams().ToBytes() :new byte[] { };
            var content = !string.IsNullOrEmpty(testData.Base64Content) ?
                          Convert.FromBase64String(testData.Base64Content)
                : new byte[] { };

            var expectedSignature = new byte[][]
            {
                testData.Method.ToBytes(), Constants.NewLine,
                testData.Url.AbsolutePath.ToBytes(), Constants.NewLine,
                content.AsSHA512Hash(), Constants.NewLine,
                testData.ApplicationUuidString.ToBytes(), Constants.NewLine,
                testData.SignedTimeUnixSeconds.ToString().ToBytes(), Constants.NewLine,
                queryParams
            }.Concat();

            var authInfo = new PrivateKeyAuthenticationInfo()
            {
                ApplicationUuid = testData.ApplicationUuid,
                SignedTime      = testData.SignedTime
            };

            // Act
            var result = await mAuthCore.GetSignature(testData.ToHttpRequestMessage(version), authInfo);

            // Assert
            Assert.Equal(expectedSignature, result);
        }
        public static async Task AuthenticateRequest_WithMWSV2Request_AfterNumberOfAttempts_WillThrowExceptionWithRequestFailure(
            MAuthServiceRetryPolicy policy)
        {
            // Arrange
            var testData      = await "GET".FromResource();
            var version       = MAuthVersion.MWSV2;
            var authenticator = new MAuthAuthenticator(TestExtensions.GetServerOptionsWithAttempts(
                                                           policy, shouldSucceedWithin: false), NullLogger <MAuthAuthenticator> .Instance);
            var mAuthCore = new MAuthCoreV2();

            var signedRequest = await mAuthCore
                                .AddAuthenticationInfo(testData.ToHttpRequestMessage(version), new PrivateKeyAuthenticationInfo()
            {
                ApplicationUuid = testData.ApplicationUuid,
                PrivateKey      = TestExtensions.ClientPrivateKey,
                SignedTime      = testData.SignedTime
            });

            // Act
            var exception = (await Assert.ThrowsAsync <AuthenticationException>(
                                 () => authenticator.AuthenticateRequest(signedRequest)));

            var innerException = exception.InnerException as RetriedRequestException;

            // Assert
            Assert.NotNull(innerException);
            Assert.Equal((int)policy + 1, innerException.Responses.Count);
            Assert.Equal(HttpStatusCode.ServiceUnavailable, innerException.Responses.First().StatusCode);
        }
Ejemplo n.º 4
0
        public static async Task CalculatePayload_WithBinaryContent_WillCalculateTheProperPayload()
        {
            // Arrange
            var testData  = await "POSTWithBinaryData".FromResourceV2();
            var mAuthCore = new MAuthCoreV2();
            var version   = MAuthVersion.MWSV2;
            // Act
            var result = await mAuthCore.CalculatePayload(testData.ToHttpRequestMessage(version), new PrivateKeyAuthenticationInfo()
            {
                ApplicationUuid = testData.ApplicationUuid,
                SignedTime      = testData.SignedTime,
                PrivateKey      = TestExtensions.ClientPrivateKey
            });

            // Assert
            Assert.Equal(testData.Payload, result);
        }
Ejemplo n.º 5
0
        public static void Verify_WithCorrectlySignedData_WillVerifyTheDataAsValid()
        {
            // Arrange
            var signature    = "This is a signature.";
            var unsignedData = signature.ToBytes();
            var mAuthCore    = new MAuthCoreV2();

            var signer = new RSACryptoServiceProvider();

            signer.PersistKeyInCsp = false;
            signer.ImportParameters(TestExtensions.ClientPrivateKey.AsRsaParameters());
            var signedData = signer.SignData(unsignedData, CryptoConfig.MapNameToOID("SHA512"));

            // Act
            var result = mAuthCore.Verify(signedData, unsignedData, TestExtensions.ClientPublicKey);

            // Assert
            Assert.True(result);
        }
        public static async Task SignRequest_WithMWSV2ValidRequest_WillSignProperly(string method)
        {
            // Arrange
            var testData = await method.FromResourceV2();

            var version             = MAuthVersion.MWSV2;
            var expectedMAuthHeader = testData.MAuthHeaderV2;
            var mAuthCore           = new MAuthCoreV2();

            // Act
            var actual = await mAuthCore.Sign(testData.ToHttpRequestMessage(version), TestExtensions.ClientOptions(testData.SignedTime));

            // Assert
            Assert.Equal(expectedMAuthHeader, actual.Headers.GetFirstValueOrDefault <string>(Constants.MAuthHeaderKeyV2));
            Assert.Equal(
                testData.SignedTime.ToUnixTimeSeconds(),
                actual.Headers.GetFirstValueOrDefault <long>(Constants.MAuthTimeHeaderKeyV2)
                );
        }
Ejemplo n.º 7
0
        public async Task CalculatePayload_WithRequestAndAuthInfo_WillReturnCorrectPayload(string method)
        {
            // Arrange
            var testData = await method.FromResourceV2();

            var version   = MAuthVersion.MWSV2;
            var mAuthCore = new MAuthCoreV2();

            var authInfo = new PrivateKeyAuthenticationInfo()
            {
                ApplicationUuid = testData.ApplicationUuid,
                SignedTime      = testData.SignedTime,
                PrivateKey      = TestExtensions.ClientPrivateKey
            };

            // Act
            var result = await mAuthCore.CalculatePayload(testData.ToHttpRequestMessage(version), authInfo);

            // Assert
            Assert.Equal(testData.Payload, result);
        }
        public static async Task AuthenticateRequest_WithValidMWSV2Request_WillAuthenticate(string method)
        {
            // Arrange
            var testData = await method.FromResourceV2();

            var version       = MAuthVersion.MWSV2;
            var authenticator = new MAuthAuthenticator(TestExtensions.ServerOptions, NullLogger <MAuthAuthenticator> .Instance);
            var mAuthCore     = new MAuthCoreV2();

            var signedRequest = await mAuthCore
                                .AddAuthenticationInfo(testData.ToHttpRequestMessage(version), new PrivateKeyAuthenticationInfo()
            {
                ApplicationUuid = testData.ApplicationUuid,
                PrivateKey      = TestExtensions.ClientPrivateKey,
                SignedTime      = testData.SignedTime
            });

            // Act
            var isAuthenticated = await authenticator.AuthenticateRequest(signedRequest);

            // Assert
            Assert.True(isAuthenticated);
        }
        public static async Task AuthenticateRequest_WithNumberOfAttempts_WillAuthenticate(
            MAuthServiceRetryPolicy policy)
        {
            // Arrange
            var testData = await "GET".FromResourceV2();

            var authenticator = new MAuthAuthenticator(TestExtensions.GetServerOptionsWithAttempts(
                                                           policy, shouldSucceedWithin: true), NullLogger <MAuthAuthenticator> .Instance);
            var mAuthCore = new MAuthCoreV2();

            var signedRequest = await mAuthCore
                                .AddAuthenticationInfo(testData.ToDefaultHttpRequestMessage(), new PrivateKeyAuthenticationInfo()
            {
                ApplicationUuid = testData.ApplicationUuid,
                PrivateKey      = TestExtensions.ClientPrivateKey,
                SignedTime      = testData.SignedTime
            });

            // Act
            var isAuthenticated = await authenticator.AuthenticateRequest(signedRequest);

            // Assert
            Assert.True(isAuthenticated);
        }