8

Google 드라이브에 통합되어 설치 될 웹 앱을 만들려고합니다. 사용자가 내 앱의 파일을 만들고 드라이브에서 공유 할 수 있습니다. 나는 Firebase를 사용하여이 파일을 작성하려고 노력하고 있으므로 많은 새로운 기능을 활용할 수 있습니다. 그러나이 두 플랫폼에서 인증이 일관되게 작동하는 데 문제가 있습니다.Firebase에서 Google AccessToken을 새로 고치는 방법은 무엇입니까? #AskFirebase

오프라인 인증 및 새로 고침 토큰을 사용할 수 없으므로 클라이언트 측 앱입니다 (적어도 현재는).

Firebase 인증 전에는 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.auth2.getAuthInstance().currentUser.get().getAuthResponse(true)); 

를 호출하여 얻을 수 있습니다, 액세스 토큰에만 만료 후 한 시간 정도 지속합니다. 중요 문제는 새로 고침 된 액세스 토큰을 얻으려면 GoogleUser.reloadAuthResponse()으로 전화하면됩니다. 새로 고침 된 액세스 토큰이 아니라 새로 고침 토큰입니다.

이론적으로 Firebase를 사용하여 described here으로 인증하기 위해 액세스 토큰을 사용할 수 있으며 팝업 흐름으로 살기 만하면됩니다 (try to hack around that).

구글은 아이덴티티 툴킷이 파이어베이스 인증으로 대체되고 있으며 새로운 애플 리케이션은 파이어베이스를 사용해야한다고 말했다.

Google Identity Toolkit의 최신 버전은 Firebase 인증으로 출시되었습니다. 여기에는 업그레이드 된 클라이언트 SDK, 오픈 소스 UI 라이브러리, 세션 관리 및 통합 이메일 전송 서비스 잊어 버린 암호 흐름이 포함됩니다.

새 프로젝트는 Firebase 인증을 사용해야합니다. 기존 프로젝트를 Identity Toolkit에서 Firebase 인증으로 마이그레이션하려면 마이그레이션 가이드를 참조하십시오.

Quoted from: Google

중포 기지는 구글과 인증에 대한 간단한 API가 있습니다. 인증시 AccessToken을 가져와 저장할 수 있습니다. 그래서 그것은 필자가 새롭고 향상된 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 서비스를 계속 사용할 수는 있지만 드라이브에 액세스하려면 사용자가 다시 로그인해야합니다. 이러면 안돼!

나는 Firebase에 GoogleUser.reloadAuthResponse()을 찾고 있습니다.

  • 어떻게하면됩니까?
  • Firebase 서비스와 G Suite 모두에 액세스하는 웹 응용 프로그램을 만드는 데 권장되는 방법은 무엇입니까?
  • 공식적인 예가 있습니까?
+0

[forum] (https://groups.google.com/forum/#!msg/firebase-talk/wAcJFfQlFeg/IUuJXNcgDHgJ)을 확인하는 것이 좋습니다. 조금 오래되었지만 새로 고침 토큰을 얻는 방법에 대해 설명했습니다. 또한 관련 [포럼] (https://groups.google.com/forum/#!topic/firebase-talk/ZPW3xtwn8g0)에서 발생한 문제에 대해 이야기합니다. 이 문제와 관련하여 업데이트가 있는지 확실하지 않지만 포럼에서 해결 방법을 적용 할 수 있다고 생각합니다. 희망이 도움이됩니다. –

+0

응답 및 링크 주셔서 감사합니다. 그것들은 약간 날짜가 있습니다. 특히 구글이 파이어베이스를 인수하기 전의 것입니다. 나는 Google 인증을 사용하지 않고 새로 고침 토큰이있는 서버의 스크래치에서 직접 구현하는 막연한 논평 이외에 실행 가능한 해결 방법을 보지 못했습니다. :( Google API에 대한 확장 된 인증을 지원하지 않는 경우, ID Toolkit 대신 Firebase의 Google Auth를 사용하는 것이 대중적으로 권장되는 이유를 이해할 수 없습니다. Google의 누군가가 응답하고 확실한 안내. – Gary

답변

4

이미 Google 드라이브 API와 통합하기 위해 gapi를 사용하여 액세스 토큰을 받고 매시간 새로 고침했습니다. 그걸 붙잡아 라.

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. ... });

액세스 토큰이 GAPI를 통해 새로 고쳐 계속하면서 이제 중포 기지에 로그인됩니다 : 당신이해야 할 것은 구글 자격 증명으로 중포 기지에 서명하는 다음과 같은 API를 사용합니다. Firebase 세션은 무기한이므로 Firebase에 다시 로그인 할 필요가 없습니다. 사람들을위한

+0

고마워. 나는 아직 실제로하지 않고있다. 그것은 새로운 애플 리케이션이고, 나는 오늘 올바른 방법으로 그것을하려고 노력하고있다. 나는 "이전의 아이덴티티 툴킷이 아닌 파이어베이스 인증을 사용하라. "그래서 내가하려는 일이고, 또한 앱에 _redirect flow_가 필요하고 Identity Toolkit에 공식적인 방법이없는 것 같습니다. Firebase Auth는 _refresh하는 방법을 알아낼 수 있다면 완벽 할 것입니다. 액세스 토큰 _ – Gary

+0

불행하게도, gapi는 리다이렉트 플로우를 지원하지 않으며 파이어베이스는 액세스 토큰을 새로 고치지 않습니다. 내가 설명한 바와 같이, 두 개의 API (액세스 토큰을 새로 고치기위한 gapi와 F irebase Auth signInWithCredential). Firebase를 통해 새로 워진 OAuth 토큰을 지원하려면 https://groups.google.com/forum/#!forum/firebase-talk에서 기능 요청을 제출하십시오. – bojeil

+0

기능 요청을 제출했는지 알 수 있습니까? 추적 할 수 있습니까? 나는 수색했지만 찾지 못했습니다. 감사! –

0

은 (클라우드 엔드 포인트를 Google에 IE)에서 중포 기지 구글 기호를 사용 후, 당신이 사용할 수있는 호출 인증 된 엔드 포인트에 대한 토큰을 얻으려고 노력 :

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

중포 기지 ID 토큰은 JWT하고있다 서명 리디렉션 콜백의 자격 증명에있는 토큰과 다릅니다. getIdToken() 함수는 필요할 경우 토큰을 새로 고치고 유효한 토큰을 콜백에 반환합니다. 로그인 리디렉션 콜백의 자격증 명에있는 토큰은 OP가 말한대로 1 시간 만료되며 다시 로그인하지 않고 새로 고침 할 수 없습니다.

firebase google signin을 사용하여 인증 된 엔드 포인트 호출을 수행하려면 getIdToken()을 사용하십시오. 그런 다음 firebase 인증을 사용하여 Google 클라우드 엔드 포인트에 대한 안내를 따르십시오.