Проблема При попытке отправить файл cookie httpOnly между внешним интерфейсом и внутренним сервером в localhost - PullRequest
0 голосов
/ 10 июля 2019

Я пытаюсь войти на веб-страницу, подтвердить в бэкэнде и ответить с помощью cookie-файла httpOnly, который должен отправляться при каждом запросе бэкэнда после SSO входа в систему (Single Sign On), поэтому.

У меня есть веб-приложение для входа в систему, реагирующее с axios для входа в систему. Я могу отправить свои учетные данные на сервер в Java.

там, в моем бэкэнде, я проверяю пользователя и пароль, и если он правильный, тогда я создаю токен JWT и файл cookie httpOnly, чтобы сохранить этот токен.

проблема в том, что я не могу получить cookie из моего бэкэнда после успешного входа в систему.

Код внешнего интерфейса:

export async function getAuthToken(data,flag) {
  console.log(data);
  try {
    const { userName, password } = data;
    const tok = `${userName}:${password}`;
    const hash = btoa(tok);
    const Basic = "Basic " + hash;
    let res = await axios.post(getAPIUrl(flag) + AUTH_URL, "",{
      headers: {
        Authorization: Basic,
        withCredentials:true,
        Accept: '*/*',
        'Content-Type': 'application/json',
        'Cache': "no-cache",
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Headers': "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin,"
      },
    });

    return {status:res.status,value:getNavigationUrl()};
  } catch (error) {
    console.log(error.response);
    alert("Status Code " + error.response.status);
    return {status:error.response.status,value:error.message};
  }

бэкэнд:

public Route basicAuthentication() {
    return (request, response) -> {
//      response.header("Access-Control-Allow-Origin","http://localhost:3000");
      LOGGER.info("Authenticating account");
      // Get the authentication passed in HTTP headers parameters
      String auth = request.headers(Constant.AUTHENTICATION_HEADER);
      if (isBlank(auth)) {
        throw new WebApplicationException(Status.UNAUTHORIZED);
      }

      if (!auth.startsWith(Constant.BASIC_AUTHENTICATION_SCHEME)) {
        Spark.halt(403, Constant.UNSUPORTED_AUTH );
      }

      List<String> tokens = decode(auth);

      // Check for total tokens.
      if (tokens == null || tokens.size() != 2) {
        throw new InvalidUserException(Constant.INVALID_TOKEN);
      }
      String username = tokens.get(0).trim();
      String password = tokens.get(1).trim();
      String jwtToken = "";
      try {
        User user = userService.authenticateUser(username, password);
        UserPreference preference = userService.getUserPreference(user.getLoginId());
        Builder userBuilder =
            new Builder(user.getLoginId(), user.getTenant()).userRole(user.getUserRole());
        if (preference != null) {
          userBuilder.email(preference.getEmailId()).name(preference.getDisplayName());
        }
        jwtToken = JWTHelper.createJWT(user.getLoginId(), "" + user.getTenant());
        request.attribute(Constants.LOGGED_USER, user);
        response.cookie("/",Constant.COOKIE_NAME,jwtToken,7600,false,true);
      } catch (InvalidUserException iue) {
        Spark.halt(403, iue.getMessage());
      }

      return Constant.SUCCESS;
    };
  }

! [Ответ - это успех, я знаю, что бэкэнд создает cookie, потому что в почтовом отделе работает] https://drive.google.com/open?id=1dERLMnh5h-3YQXRQeymSv8nu4cSwaDQo

! [Но в моем интерфейсе я не могу получить это печенье] https://drive.google.com/open?id=11SHJSLqMxnyStzCBgBixrPD1Z5t39ZkW

...