Apache HUE, можно войти с помощью REST API, но остальное не работает - PullRequest
0 голосов
/ 30 мая 2020

Я борюсь с Apache HUE Rest API и django csrf.

Проблема в том, что я могу ввести логин, но остальное не работает. Меня всегда перенаправляют на страницу входа. Похоже, серверу не нравятся мои csrftoken или sessionid cook ie.

Я понятия не имею, почему. Вот мой код входа:

val accessToken = getAccessToken(Http(s"$baseUrl/accounts/login/?next=/").asString)
    val response =
      Http(s"$baseUrl/accounts/login/")
        .postForm(Seq(
          "username" -> username,
          "password" -> password,
          "csrfmiddlewaretoken" -> accessToken.csrftoken.getValue,
          "next" -> "/"
        ))
        .cookie(accessToken.csrftoken)
        .asString
    getAccessToken(response) // wrapper for cookies and headers from response

Теперь я пытаюсь просто получить страницу из HUE, защищенную csrf

 def getDir(hdfsPathDirParent: String): Unit = {
    val accessToken = login()
    val response = Http(s"$baseUrl/filebrowser/view=$hdfsPathDirParent")
      .cookie(accessToken.csrftoken) // retrieved after login
      .cookie(accessToken.sessionid) // retrieved after login
      .header("X-CSRFToken", accessToken.csrftoken.getValue)
      .header("Host", "localhost:8888")
      .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9")
      .header("Connection", "keep-alive")
      .header("Sec-Fetch-Dest", "empty")
      .header("Sec-Fetch-Mode", "cors")
      .header("Sec-Fetch-Site", "same-origin")
      //.header("Sec-Fetch-User", "?1")
      .header("Upgrade-Insecure-Requests", "1")
      .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36")
      .header("Accept-Encoding", "gzip, deflate, br")

      .header("Accept-Language", "en,en-US;q=0.9,ru;q=0.8")
      .header("Cache-Control", "max-age=0")
      .header("X-Requested-With", "XMLHttpRequest")

      .asString

Я буквально скопировал все токены из панели отладки Google Chrome . Это не работает

[30/May/2020 05:19:29 -0700] access       WARNING  172.17.0.1 test_user - "POST /accounts/login/ HTTP/1.1" -- Successful login for user: test_user
[30/May/2020 05:19:29 -0700] middleware   INFO     Redirecting to login page: /filebrowser/view=/user/test_user
[30/May/2020 05:19:29 -0700] access       INFO     172.17.0.1 -anon- - "GET /filebrowser/view=/user/test_user HTTP/1.1" -- login redirection

Итак, я передаю форму входа, но остальное не работает. Не могу найти то, что мне не хватает ...

Их пример кода не работает

http://cloudera.github.io/hue/latest/developer/api/

Ответы [ 2 ]

0 голосов
/ 30 мая 2020

Это не кажется интуитивно понятным, но

def getDir(accessToken: CookiesAndHeaders, hdfsPathDirParent: String): (String, CookiesAndHeaders) = {
    val req = Http(s"$baseUrl/filebrowser/view=$hdfsPathDirParent")
      .cookie(accessToken.sessionid)
    val response = req.asString

просто НЕ * передавать csrftoken как cook ie, используйте ТОЛЬКО sessionid sessionid Cook ie. Понятия не имею почему, но это помогло ...

0 голосов
/ 30 мая 2020

Разве вы не получаете обратно перенаправление HTTP 302 вместо 200? (так что вам нужно будет ввести свой код).

Также выше do c сайт устарел, https://docs.gethue.com/developer/api/#python - новый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...