private async Task <TblIdentityCredential> ValidatePassword(AuthenticateIdentityQuery request, AuthorizeBy authorizeBy, TblIdentityCredential credential, CancellationToken cancellationToken) { SHA512 shaM = new SHA512Managed(); var passwordByte = Encoding.ASCII.GetBytes(request.Password); var hashPasswordByte = shaM.ComputeHash(passwordByte); if (authorizeBy == AuthorizeBy.Token) { return(credential); } credential = await _dataLayer.TblIdentityCredentials .Include(i => i.IdentityInfo) .FirstOrDefaultAsync(i => i.Id == credential.Id & i.PasswordByte == hashPasswordByte, cancellationToken: cancellationToken); return(credential); }
public async Task <QueryResponseBO <AuthorizeIdentityContract> > Handle(AuthenticateIdentityQuery request, CancellationToken cancellationToken) { var credential = await ValidateAuthorization(request, cancellationToken, request.AuthorizeBy); if (credential == null) { return(new() { Message = $"Identity does not exist", HttpStatusCode = HttpStatusCode.NotFound }); } credential = await ValidatePassword(request, request.AuthorizeBy, credential, cancellationToken); if (credential == null) { return(new() { Message = $"Identity Authentication Failed", HttpStatusCode = HttpStatusCode.BadRequest }); } var token = await _jwtService.GenerateToken(request.Username, new Guid(credential.Cuid)); return(new() { Message = $"Identity Authorized", HttpStatusCode = HttpStatusCode.Accepted, Response = new() { AccessToken = token.AccessToken, RefreshToken = token.RefreshToken, UserAuthId = credential.Id, UserName = credential.UserName } }); }
public async Task <QueryResponse <AuthorizeIdentityResponse> > Handle(AuthenticateIdentityQuery request, CancellationToken cancellationToken) { var response = await IdentityServiceWrapper.AuthenticateCredential(request.Adapt <AuthenticateCredentialRequest>()); return(response.Adapt <QueryResponse <AuthorizeIdentityResponse> >()); }
private async Task <TblIdentityCredential> ValidateAuthorization(AuthenticateIdentityQuery request, CancellationToken cancellationToken, AuthorizeBy authorizeBy) { TblIdentityCredential result; reAuth: switch (authorizeBy) { case AuthorizeBy.Default: var getDefaults = await _dataLayer.TblConfigurations .AsNoTracking() .FirstOrDefaultAsync(i => i.ApplicationId == request.RequestServer.ApplicationId & i.Key == "DefaultAuthorizeBy", cancellationToken: cancellationToken); authorizeBy = (AuthorizeBy)int.Parse(getDefaults.Value); goto reAuth; case AuthorizeBy.UsernameEmailPhone: result = await _dataLayer.TblIdentityCredentials .AsNoTracking() .FirstOrDefaultAsync(i => i.UserName == request.Username, cancellationToken: cancellationToken); result ??= _dataLayer.TblIdentityContacts .AsNoTracking() .FirstOrDefault(i => i.Value == request.Username & i.UcentitiesId == 1)?.UserCredential; result ??= _dataLayer.TblIdentityContacts .FirstOrDefault(i => i.Value == request.Username & i.UcentitiesId == 2)?.UserCredential; break; case AuthorizeBy.Username: result = await _dataLayer.TblIdentityCredentials .AsNoTracking() .FirstOrDefaultAsync(i => i.UserName == request.Username, cancellationToken: cancellationToken); break; case AuthorizeBy.Email: result = _dataLayer.TblIdentityContacts .AsNoTracking() .FirstOrDefault(i => i.Value == request.Username & i.UcentitiesId == 1)?.UserCredential; break; case AuthorizeBy.Phone: result = _dataLayer.TblIdentityContacts .AsNoTracking() .FirstOrDefault(i => i.Value == request.Username & i.UcentitiesId == 2)?.UserCredential; break; case AuthorizeBy.Token: result = await _dataLayer.TblIdentityCredentials .AsNoTracking() .FirstOrDefaultAsync(i => i.UserName == request.Username, cancellationToken: cancellationToken); break; default: throw new ArgumentOutOfRangeException(); } return(result); }
public async Task <JsonResult> Authenticate([FromBody] AuthenticateIdentityQuery request) { var result = await _mediator.Send(request); return(new JsonResult(result)); }