реализуй api для фронта по задаче 1. Аутентификация:
На вход принимаем логин и пароль и проверяем их с помощью com.ncs.security.service.AuthServiceImpl#auth(java.lang.String, java.lang.String, java.lang.String). Дополнительно делаем проверки как в com.ncs.company.security.NcsAuthenticationProvider#getAuthToken. В случае успеха, отправляем назад token.  Методы auth и getAuthToken предоставляю

public AuthResult auth(String login, String password, String ip) {
		LOGGER.debug("Authenticating with {}, {}, IP:{}", login, password, ip);

		if (isEmpty(login)) {
			return invalidAuthResult("Не указан логин", "Ваш логин введен неверно",
					"В случае возникновения вопросов, обратитесь в службу поддержки клиентов по телефону",
					WARNING, false);
		}

		UserFilter filter = new UserFilter();
		filter.setLogin(login);
		User user = userRepository.findOne(UserSpecification.buildFilterSpecification(filter));

		if (user == null) {
			return invalidAuthResult(
					"Введите номер телефона или e-mail, которые вы указали при регистрации аккаунта в системе Цифра банк.",
					"Ваш логин введен неверно.",
					"В случае возникновения вопросов, обратитесь в службу поддержки клиентов по телефону",
					WARNING, false);
		}
		if (isDeleted(user)) {
			return invalidAuthResult(
					"Указанный аккаунт заблокирован. Для разблокировки обратитесь в службу поддержки клиентов",
					"Ошибка аутентификации", EMPTY, DANGER, false);
		}

		HashCreator hc = new HashCreator();
		String passwordHash = hc.getPasswordHash(password, user.getSalt());
		if (!passwordHash.equals(user.getPasword())) {
			if (user.getUnsuccessfulLogin() == null) {
				user.setUnsuccessfulLogin(1L);
			} else {
				user.setUnsuccessfulLogin(user.getUnsuccessfulLogin() + 1);
				user.setLastLogin(new Date());
				user.setLastIp(ip);
				if (user.getUnsuccessfulLogin().equals(Long.parseLong(Constants.get(MAX_UNSUCCESSFUL_LOGIN)) - 1)) {
					return invalidAuthResult(
							"Для предотвращения несанкционированного доступа к данным у Вас осталась последняя попытка входа в систему.",
							"Не верный пароль.", EMPTY, DANGER, false);
				}
				if (user.getUnsuccessfulLogin() >= Long.parseLong(Constants.get(MAX_UNSUCCESSFUL_LOGIN))) {
					user.setState(UserState.DELETED);
					return invalidAuthResult(
							"Превышено допустимое кол-во попыток входа в систему. Для предотвращения несанкционированного доступа к данным Ваша учетная запись заблокирована. Для разблокировки пожалуйста обратитесь в службу поддержки клиентов.",
							"Не верный пароль.", EMPTY, DANGER, true);
				}
			}
			return invalidAuthResult(
					"У вас осталось 2 попытки на ввод пароля, после этого ваш аккаунт будет заблокирован.",
					"Не верный пароль.", EMPTY, DANGER, false);
		}

		user.setLastIp(ip);
		user.setLastLogin(new Date());
		user.setUnsuccessfulLogin(0L);
		AuthResult result = new AuthResult();
		Token token = new Token();
		String tokenStr = getSecureCode();
		token.setToken(tokenStr);
		token.setTokenValidity(new Date(new Date().getTime() + singletonBean.getTokenValidity()));
		token.setUserId(user.getId());
		token.setValid(true);
		token = tokenRepository.save(token);
		tokenCache.put(token);
		result.setToken(token);
		result.setValid(true);
		result.setUserId(user.getId());

		return result;
	}

public UsernamePasswordAuthenticationToken getAuthToken(Object principal, Object credentials, Employee employee) {
        PartnerEmployeeFilter filter = new PartnerEmployeeFilter();
        filter.setEmployeeId(employee.getId());
        List<PartnerEmployee> partnerEmployees = partnerEmployeeService.find(filter);
        if (partnerEmployees == null || partnerEmployees.size() == 0 || partnerEmployees.size() > 1) {
            throw getAuthenticationException();
        }

        List<UserInfoPartner> partners = new ArrayList<>();
        for (PartnerEmployee e : partnerEmployees) {
            if (!ActiveState.activeStates().contains(e.getActiveState())) {
                throw new NcsAuthenticationException("Доступ в систему заблокирован.",
                        "Ошибка аутентификации", "В случае возникновения вопросов, обратитесь в службу поддержки клиентов по телефону",
                        AuthResultType.WARNING);
            }
            UserInfoPartner partner = new UserInfoPartner();
            partner.setId(e.getPartner().getId());
            partner.setName(e.getPartner().getName());
            if (e.getPartner() instanceof Company) {
                Company company = (Company) e.getPartner();
                if (!ActiveState.activeStates().contains(company.getActiveState())) {
                    throw new NcsAuthenticationException("Доступ в систему заблокирован.",
                            "Ошибка аутентификации", "В случае возникновения вопросов, обратитесь в службу поддержки клиентов по телефону",
                            AuthResultType.WARNING);
                }
            }
            partners.add(partner);
        }

        UserInfo info = new UserInfo();
        info.setId(employee.getId());
        info.setLogin(employee.getEmail());
        info.setPhone(employee.getPhone());
        PassportData passportData = employee.getPassportData();
        if (passportData != null) {
            info.setFirstName(passportData.getFirstName());
            info.setLastName(passportData.getLastName());
            info.setMiddleName(passportData.getMiddleName());
        }
        info.setCompanyCssDir(WebConstants.THEME_DEFAULT);
        info.setPartners(partners);
        if (info.getPartners().size() > 0) {
            info.setPartner(info.getPartners().get(0));
        }
        info.setAccessType(employee.getAccessType());

        // TODO: тут список ролей пользователя. (при необходимости)
        Collection<GrantedAuthority> authorities = new HashSet<GrantedAuthority>();

        UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(principal, credentials, authorities);
        authToken.setDetails(info);
        return authToken;