2016-07-30 3 views
0

Firebase의 이전 버전에서는 Java로 작성된 서버 응용 프로그램이 비밀 및 JWT 토큰 생성기를 사용하여 백엔드로 인증합니다. 그런 다음 언제든지 Firebase.getAuth().getToken()에 전화를 걸어 HTTP 호출에서 해당 토큰을 auth 매개 변수로 다시 사용할 수 있습니다.firebase-server-sdk 자격 증명을 REST API로 다시 사용하기

새로운 firebase-server-sdk으로 제한 서비스 계정 자격 증명/토큰을 REST API와 재사용하는 방법은 무엇입니까? 특히 server-app UID를 필요로 위치를 - 나는/구독 특정 위치에 쓸 SDK를 사용할 때 모든 위대한 작품을

Map<String, Object> auth = new HashMap<String, Object>(); 
auth.put("uid", "server-app"); 

FirebaseOptions options = new FirebaseOptions.Builder() 
      .setDatabaseUrl(Environment.FIREBASE_URL) 
      .setServiceAccount(MyClass.class.getResourceAsStream("/keys/dev.json")) 
      .setDatabaseAuthVariableOverride(auth) 
      .build(); 

FirebaseApp.initializeApp(options); 

. 하지만 서버 응용 프로그램에서 REST를 함께 사용하면 서버 응용 프로그램이 동기 읽기를 수행하기 때문에 Firebase 만 REST API를 통해 지원합니다.

FirebaseRestClient firebaseRest = new RestAdapter.Builder() 
       .setEndpoint(Environment.FIREBASE_URL) 
       .setRequestInterceptor(new RequestInterceptor() { 
        @Override 
        public void intercept(final RequestFacade request) { 
         request.addQueryParam("access_token", FirebaseAuth.getInstance().createCustomToken("server-app")); 
        } 
       }) 
       .build().create(FirebaseRestClient.class); 

나는 access_tokenauth PARAM 모두를 추가하는 시도했습니다. createCustomToken 메소드가 유효한 JWT를 생성하지만 REST API가 응답하지 않는 것 같습니다.

createCustomToken 반환 값을 전달하면 auth PARAM, 나는 다음과 같은 메시지가 얻을 : 나는 access_token PARAM로 그 createCustomToken 반환 값에 전달하는 경우

"error" : "Missing claim 'kid' in auth header." 

, 나는 기본 Permission denied API 응답을 얻기를 .

REST API 호출에서 기존 firebase-server-sdk 자격 증명을 쉽게 다시 사용할 수 있습니까?

답변

1

사용하려는 토큰은 Firebase 인증 ID 토큰입니다.이 토큰은 클라이언트의 Firebase SDK로 전달되도록 설계되었습니다. REST API는 Firebase 액세스 토큰을 수용합니다 (이전 Firebase 클라이언트의 것과 동일).

일반적으로 Firebase SDK가 ID 토큰을 액세스 토큰으로 변환하기 때문에 인증에 실패합니다. 귀하의 서버는 이 아닙니다이 전환을 수행하거나 Firebase SDK를 사용하여 액세스 토큰을 생성 할 수 있으므로 원본 Firebase Token Generator library을 Firebase Secret과 함께 사용하여 REST API에 대한 액세스 토큰을 만드는 것이 좋습니다. 이것은 I/O 릴리스 이후 생성 된 새로운 Firebase 프로젝트에도 잘 작동합니다.

참고 : 콘솔에서 데이터베이스 기밀은 (기어 아이콘)> 프로젝트 설정> 데이터베이스에서 찾을 수 있습니다.

+0

아베, 데이터베이스 기밀 정보가 현재 사용되지 않으므로 업데이트가 있습니까? –

1

나는이이 권고하지 않습니다 확신, 약속 accessToken을 반환하여 SDK가 serviceAccount으로 로그인 한 경우

, 당신은 firebase.auth().INTERNAL.getToken()를 사용할 수있는 문서화되지 않은 재산의 이름,하지만 ..., (부여 및 expirationTime) 다음 ?access_token 매개 변수와 함께 작동합니다.

+0

node.js SDK 용으로 추가해야합니다. –

관련 문제