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) ); }
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); }
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); }
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) ); }
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); }