public async Task <IActionResult> Login(WindowsLoginModel model) { string userName = User.Identity.Name; log.LogInformation("Windows login for user {0}...", userName); var dtoGetUserInfo = new GetUserInfoByAccountNameInputDto(); dtoGetUserInfo.SamAccountName = userName; var userInfo = activeDirectoryController.GetUserInfoByAccountName(dtoGetUserInfo); var user = await userManager.FindByLoginAsync("AD", userName); if (user == null) { var newUser = new ApplicationUser { UserName = userName, Email = userInfo.Email }; var createResult = await userManager.CreateAsync(newUser); if (!createResult.Succeeded) { ModelState.AddModelError("", String.Join(", ", createResult.Errors)); return(BadRequest(ModelState)); } var userLoginInfo = new UserLoginInfo("AD", userName, userInfo.DisplayName); var addLoginResult = await userManager.AddLoginAsync(newUser, userLoginInfo); if (!addLoginResult.Succeeded) { ModelState.AddModelError("", String.Join(", ", addLoginResult.Errors)); return(BadRequest(ModelState)); } } var claims = await GetUserClaims(user); var accessTokenString = authService.GenerateAccessTokenString(claims); var refreshTokenString = await authService.NewRefreshToken(model.ClientId, userName, accessTokenString); return(Ok(new { AccessToken = accessTokenString, RefreshToken = refreshTokenString })); }
public GetUserInfoByAccountNameOutputDto GetUserInfoByAccountName(GetUserInfoByAccountNameInputDto dto) { if (String.IsNullOrEmpty(dto.SamAccountName)) { throw new ArgumentNullException(nameof(dto.SamAccountName)); } GetUserInfoByAccountNameOutputDto output = new GetUserInfoByAccountNameOutputDto(); string domainName = null; string samAccountName = dto.SamAccountName; // Se il samAccountName fornito contiene una indicazione relativa al dominio, utilizzala string[] accountNameElements = dto.SamAccountName.Split(new[] { '\\' }, 2); if (accountNameElements.Length > 1) { domainName = accountNameElements[0]; samAccountName = accountNameElements[1]; } if (String.IsNullOrEmpty(samAccountName)) { throw new ArgumentNullException(nameof(dto.SamAccountName)); } using (var principalContext = new PrincipalContext(ContextType.Domain, domainName)) { var principal = UserPrincipal.FindByIdentity(principalContext, samAccountName); if (principal == null) { return(null); } output.SamAccountName = principal.SamAccountName; output.Cognome = principal.Surname; output.Nome = principal.GivenName; output.DisplayName = principal.DisplayName; output.Email = principal.EmailAddress; } return(output); }