Токены передачи пользовательской аутентификации Firebase

Я использую сервер Go, который генерирует токены JWT. Мой первоначальный план состоял в том, чтобы отправлять токены с помощью http.Redirect, используя строку токена как часть URL-адреса.

Похоже, это не работает, потому что я использую статический хостинг Firebase и, следовательно, имею только маршрутизацию на стороне клиента.

Как я могу отправить свой токен? Может заголовки?

  • Я запускаю свой статический SPA на «example.firebaseapp.com» (A).
  • Я запускаю свой сервер, который генерирует токены на «example.us-west-2.compute.amazonaws.com» (B)
  • сервер cas работает по адресу 'https://login.example.edu/cas/' (С)
  • Также есть конечно же компьютер пользователя (D)

Поток идет следующим образом

  1. Пользователь загружает веб-сайт со статического хоста (A)
  2. Пользователь на компьютере D нажимает кнопку «Войти через школу» и перенаправляется на мой сервер (B)
  3. Затем B перенаправляет на сервер cas (C). Пользователь вводит свои учетные данные и перенаправляется на компьютер B.
  4. Затем компьютер B генерирует токен, используя секретный ключ и идентификатор пользователя.
  5. Этот токен нужно каким-то образом вернуть пользователю. Затем пользователь вызовет ref.authWithCustomToken("AUTH_TOKEN", function(error, authData) {

Перейти серверный код

    func (h *myHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
      if !cas.IsAuthenticated(r) {
        cas.RedirectToLogin(w, r)
        return
      }

    if r.URL.Path == "/logout" {
        cas.RedirectToLogout(w, r)
        return
    }

  generatedToken := generateToken("uid") // token is created using a uid and a secret
    redirectURL := websiteURL + generatedToken
    println(redirectURL)

    println(generatedToken)
    http.Redirect(w, r, redirectURL, http.StatusFound) // I attempt to send the token using a redirect. This doesn't seem to work though since the static server only supports routing for '/'. 
    //html.WriteTo(w)

    }

person Chris W    schedule 19.03.2016    source источник
comment
Я не понимаю, что вы пытаетесь сделать. Где вы запускаете свой сервер Go? Как вы пытаетесь передать токен? Отображение кода минимального, полного воспроизведения проблемы может иметь большое значение для прояснения.   -  person Frank van Puffelen    schedule 20.03.2016
comment
@FrankvanPuffelen Я обновил свой пост. Я запускаю свой сервер go на AWS. Я передаю токен через URL-адрес, который работает, но статический сервер не распознает URL-адрес, поскольку для него нет маршрутизации. Форматирование кода немного испорчено, не знаю почему - не стесняйтесь редактировать мой пост, если хотите.   -  person Chris W    schedule 20.03.2016
comment
@ChrisW, ты когда-нибудь понимал это? Мне любопытно, что у вас в итоге получилось, потому что я думаю об этом точно таком же рабочем процессе. Мы также используем CAS для нашей центральной аутентификации.   -  person Kevin    schedule 19.07.2016
comment
Ага! Я последовал тому, что сказал Фрэнк. Я передал токен через URL.   -  person Chris W    schedule 22.07.2016


Ответы (1)


Если я правильно понимаю поток, то вам не хватает конечной точки, с которой разговаривает пользователь вашего приложения и которая может вернуть токен этому пользователю.

Обходной путь для этого может заключаться в том, чтобы пользовательское приложение передало крайне сложное значение («идентификатор запроса») на шаге 2, что-то вроде UUID. Затем сервер токенов может записать токен в базу данных Firebase на шаге 5 в /tokens/<requestID>, где клиент его прослушивает.

person Frank van Puffelen    schedule 20.03.2016
comment
Спасибо, я попробую это - person Chris W; 20.03.2016