コード例 #1
0
        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 }));
        }
コード例 #2
0
        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);
        }