8

Я пытаюсь создать веб-приложение, которое будет интегрировано и установлено на Google Диске. Пользователь сможет создавать и делиться файлами моего приложения на своем диске. Я пытаюсь написать его с помощью Firebase, чтобы я мог использовать многие из замечательных новых функций. Тем не менее, мне трудно заставить auth работать последовательно на этих двух платформах.Как обновить Google AccessToken в Firebase? #AskFirebase

Это приложение на стороне клиента (по крайней мере, на данный момент), поэтому я не могу использовать токены и обновлять токены.

Перед тем, как Firebase auth, я бы использовал Google Identity Toolkit with gapi. Обычно это нормально работает, хотя использует всплывающий поток, который не является мобильным.

gapi.signin2.render(elementId, { 
     longtitle: true, 
     width: 230, 
     height: 50, 
     theme: "dark" 
    }); 

    var auth2 = gapi.auth2.init({ 
     client_id: CLIENT_ID, 
     scope: SCOPES.join(" ") 
    }); 

    auth2.isSignedIn.listen(signinChanged); 
    auth2.currentUser.listen(userChanged); 

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

gapi.auth2.getAuthInstance().currentUser.get().getAuthResponse(true)); 

Как обычно, доступ лексемы длится около часа, а затем истекает. Важно Дело в том, что мы можем просто позвонить GoogleUser.reloadAuthResponse(), чтобы получить обновленный токен доступа. Обратите внимание, что это обновленный токен доступа, а не токен обновления!

Итак, теоретически, я могу использовать этот токен доступа для аутентификации с помощью Firebase как described here, и вам нужно просто жить с помощью всплывающего потока, или try to hack around that.

Все, что сказано, Google говорит, что набор Identity Toolkit заменяется Firebase Authentication и что новые приложения должны использовать Firebase.

Новейшая версия Google Identity Toolkit была выпущена как Аутентификация Firebase. Он включает в себя обновленные клиентские SDK, открытый исходный код UI-библиотеки, управление сеансом и встроенную службу отправки электронной почты для забытых паролей.

Новые проекты должны использовать Firebase Authentication. Чтобы перенести существующий проектиз набора Identity Toolkit в Firebase Authentication, см. Руководство по перенастройке .

Quoted from: Google

Firebase имеет простой API для AUTH с помощью Google. Я могу получить и сохранить AccessToken после аутентификации. Поэтому мне кажется, что я должен реализовать auth, новый и улучшенный способ Firebase. Кроме того, Firebase обеспечивает хороший поток перенаправления, который работает на мобильных устройствах.

Однако существует огромная проблема ...

Это получит маркер доступа.

firebase.auth().getRedirectResult().then(function(result) { 
     if (result.credential) { 
     // This gives you a Google Access Token. You can use it to access the Google API. 
     var token = result.credential.accessToken; 
     // ... 
     } 

     // The signed-in user info. 
     var user = result.user; 
    }) 

Маркер доступа доступен, и я могу использовать его для чтения/записи на диск, ... в течение часа. Как только этот токен истекает, я больше не могу ничего делать. Пользователь по-прежнему регистрируется в Firebase, поэтому я могу продолжать использовать службы Firebase, но мне нужно будет заставить пользователя снова войти в систему, чтобы получить доступ к диску. Этого не будет!

Я ищу эквивалент GoogleUser.reloadAuthResponse() в Firebase.

  • Как это сделать?
  • Каков рекомендуемый способ создания веб-приложения, которое обращается к службам Firebase и G Suite?
  • Есть ли официальные примеры?
+0

Возможно, вы захотите проверить этот [форум] (https://groups.google.com/forum/#!msg/firebase-talk/wAcJFfQlFeg/IUuJXNcgDHgJ), это бит старый, но он обсудил некоторые шаги, как получить токен обновления. Также связанный [форум] (https://groups.google.com/forum/#!topic/firebase-talk/ZPW3xtwn8g0) рассказывает о проблеме, с которой вы столкнулись. Я не уверен, есть ли какие-либо обновления относительно этого, но я думаю, вы можете применить обходной путь на указанном форуме. Надеюсь это поможет. –

+0

Спасибо за ответ и ссылки. Это немного устаревший, особенно первый, который, по моему мнению, до того, как Google приобрел Firebase. Я не видел жизнеспособного обходного пути, кроме неясного комментария, чтобы не использовать их аут Google и реализовать его сам с нуля на сервере с токеном обновления. :( Я не понимаю, почему Google публично рекомендовал бы использовать Firebase в Google Auth вместо Identity Toolkit, если он не поддерживает расширенные полномочия API Google за один час. Я надеюсь, что кто-то из Google ответит и предоставит некоторые окончательное руководство. – Gary

ответ

4

Вы уже используете gapi, чтобы получить токен доступа и обновлять его каждый час для интеграции с API Google Drive. Придерживайтесь этого. Что вам нужно сделать, это использовать следующий API, чтобы подписать Firebase с учетными данными Google:

var cred = firebase.auth.GoogleAuthProvider.credential(null, gapiAccessToken); firebase.auth().signInWithCredential(cred).then(function(user) { // You are signed in to Firebase now and do not need to re-sign in again. ... });

Вы теперь вошли, Firebase в то время как ваш маркер доступа продолжает обновляться через GAPI. Сессии Firebase являются неопределенными, поэтому вам не нужно снова входить в Firebase.

+0

Спасибо. Я на самом деле еще не делаю этого. Это новое приложение, и я пытаюсь сделать это правильно с сегодняшнего дня. Я читал сообщение Google так: «используйте Firebase auth, а не старый Identity Toolkit «Это то, что я пытаюсь сделать. Кроме того, моему приложению нужен _redirect flow_, а Identity Toolkit, похоже, не имеет официального способа сделать это. Firebase Auth был бы идеальным, если бы я мог просто понять, как _refresh токен доступа – Gary

+0

К сожалению, gapi не поддерживает перенаправление потока, и Firebase не обновляет токены доступа. Как я уже объяснил, вам нужно использовать оба API (gapi для обновления токенов доступа и F irebase Auth signInWithCredential). Отправьте запрос функции на странице https://groups.google.com/forum/#!forum/firebase-talk, чтобы поддерживать обновление токенов OAuth через Firebase. – bojeil

+0

Вы случайно не знаете, был ли запрос функции подан, чтобы я мог отслеживать его? Я искал, но не смог найти его. Благодаря! –

0

Для тех, кто просто пытаюсь получить маркер для аутентичной конечной точки вызовов после использования firebase Google знака в (т.е. Google облако конечных точек), вы можете использовать:

var successCallback = function(firebaseIdJsonWebToken) { 
    console.log("token: " + firebaseIdJsonWebToken); 
} 
var errorCallback = function(error) { 
    console.log("error: " + error); 
} 
firebase.auth().currentUser.getIdToken().then(successCallback, errorCallback) 

Маркер firebase идентификатора является JWT и отличающийся от маркера в учетных данных от обратного вызова переадресации. Функция getIdToken() обновит токен, если он понадобится, и вернет действительный токен для обратного вызова. Токен в учетных данных из обратного вызова с обратным вызовом будет истекать через 1 час, как сказал OP, и его нельзя обновить, не пытаясь снова войти в систему.

Если вы хотите выполнять аутентифицированные вызовы конечных точек, используя firebase google signin, используйте getIdToken(). Затем следуйте инструкциям для конечных точек google с помощью firebase auth.