public async Task SuccessfulAuthentication_ReturnsCorrectAuthHeaders_AndRedirectsTo_GetRemindersView() { var fakeAccessToken = "fakeAccessToken"; var fakeIdToken = "fakeIdToken"; var fakeRefreshToken = "fakeRefreshToken"; var user = new AwsCognitoUser { UserName = "******", Password = "******" }; var mockAuthResult = new AuthenticationResultType { AccessToken = fakeAccessToken, IdToken = fakeIdToken, RefreshToken = fakeRefreshToken }; _authAdapter.AuthenticateUserAsync(Arg.Any <AwsCognitoUser>()).Returns(new HttpResponseMessage { StatusCode = HttpStatusCode.OK, Content = new StringContent(JsonConvert.SerializeObject(mockAuthResult)) }); var context = _accountsController.ControllerContext.HttpContext = new DefaultHttpContext(); var authResponse = await _accountsController.Login(user) as RedirectToActionResult; Assert.AreEqual("GetRemindersView", authResponse.ActionName); }
public async Task SuccessfulAuthenticationRequest_ReturnsAuthenticationResult_AndStatusCodeOk() { var fakeAccessToken = "fakeAccessToken"; var fakeIdToken = "fakeIdToken"; var fakeRefreshToken = "fakeRefreshToken"; var user = new AwsCognitoUser { UserName = "******", Password = "******" }; _cognitoAdapterHelper.UserExists(Arg.Any <AwsCognitoUser>()).Returns(true); _cognitoAdapterHelper.UserIsConfirmed(Arg.Any <AwsCognitoUser>()).Returns(true); _awsCognitoClient.InitiateAuthAsync(Arg.Any <InitiateAuthRequest>()).Returns(new InitiateAuthResponse { AuthenticationResult = new AuthenticationResultType { AccessToken = fakeAccessToken, IdToken = fakeIdToken, RefreshToken = fakeRefreshToken } }); var authResponse = await _authAdapter.AuthenticateUserAsync(user); var content = await authResponse.Content.ReadAsStringAsync(); var authenticationResult = JsonConvert.DeserializeObject <AuthenticationResultType>(content); Assert.AreEqual(HttpStatusCode.OK, authResponse.StatusCode); Assert.AreEqual(fakeAccessToken, authenticationResult.AccessToken); Assert.AreEqual(fakeIdToken, authenticationResult.IdToken); Assert.AreEqual(fakeRefreshToken, authenticationResult.RefreshToken); }
public async Task <IActionResult> Login([FromBody] AwsCognitoUser cognitoUser) { try { var loginResponse = await _authAdapter.AuthenticateUserAsync(cognitoUser); switch (loginResponse.StatusCode) { case HttpStatusCode.OK: var authResult = JsonConvert.DeserializeObject <AuthenticationResultType>( await loginResponse.Content.ReadAsStringAsync()); var tokenResponse = new TokenResponse { IdToken = authResult.IdToken, RefreshToken = authResult.RefreshToken, AccessToken = authResult.AccessToken }; return(new ContentResult { Content = JsonConvert.SerializeObject(tokenResponse), ContentType = "application/json", StatusCode = (int)HttpStatusCode.OK }); case HttpStatusCode.BadRequest: return(new BadRequestObjectResult($"Login failed. User {cognitoUser.UserName} is unconfirmed.")); case HttpStatusCode.NotFound: return(new NotFoundObjectResult($"Login failed. User {cognitoUser.UserName} does not exist.")); default: return(new ContentResult { ContentType = "text/plain", Content = "An error has occurred", StatusCode = (int)loginResponse.StatusCode }); } } catch (Exception e) { Console.WriteLine(e); throw; } }
public async Task <IActionResult> Login(AwsCognitoUser cognitoUser, string message = "") { ViewBag.InfoMessage = message; HttpResponseMessage loginResponse; try { loginResponse = await _authAdapter.AuthenticateUserAsync(cognitoUser); if (loginResponse.IsSuccessStatusCode) { await _userRepository.UpdateMostRecentLoginTimeAsync(cognitoUser.UserName); var authResult = JsonConvert.DeserializeObject <AuthenticationResultType>(await loginResponse.Content.ReadAsStringAsync()); HttpContext.Response.Cookies.Append( "IdToken", authResult.IdToken, new CookieOptions { HttpOnly = true } ); HttpContext.Response.Cookies.Append( "RefreshToken", authResult.RefreshToken, new CookieOptions { HttpOnly = true } ); HttpContext.Response.Cookies.Append( "AccessToken", authResult.AccessToken, new CookieOptions { HttpOnly = true } ); } } catch (Exception ex) { _logger.LogError(ex); return(RedirectToAction("GetLoginView", "Accounts", new { message = "An error has occurred." })); } switch (loginResponse.StatusCode) { case HttpStatusCode.OK: return(RedirectToAction("GetRemindersView", "Reminders")); case HttpStatusCode.BadRequest: return(RedirectToAction("GetConfirmAccountView", "Accounts", new { message = $"Login failed. User {cognitoUser.UserName} is unconfirmed. Please confirm account to continue." })); case HttpStatusCode.NotFound: return(RedirectToAction("GetCreateAccountView", "Accounts", new { message = $"Login failed. User {cognitoUser.UserName} does not exist. Please create an account to continue." })); default: _logger.LogError(loginResponse); return(RedirectToAction("GetLoginView", "Accounts", new { message = "An error has occurred." })); } }