2017-12-12 13 views
1

저는 firebase를 사용하여 클라이언트의 사용자를 인증하는 각기 다른 앱을 가지고 있습니다. 이것은 제대로 작동하는 것 같습니다.클라이언트에서 이미 인증 된 경우 firebase가있는 서버에서 사용자를 인증하는 방법은 무엇입니까?

export class AuthService { 
    user$: Observable<firebase.User>; 

    constructor(private af_auth: AngularFireAuth) { 
    this.user$ = this.af_auth.authState; 
    this.user$.subscribe(user => { 
     // do something with the firebase user 
    }); 
    } 

} 

또한 Express와 함께 node.js에서 실행되는 서버 기반 항목이 있습니다. 내 엔드 포인트를 때리는 사용자가 이미 firebase를 통해 내 앱으로 인증되었는지 확인하려고합니다. 내가 할 수 있을까?

var firebase_app = firebase.initializeApp(firebase_config); 

auth.isAuthenticated = function (req, res, next) { 

    // I had seen a suggestion to do the following, but currentUser is always null here. 
    var user = firebase_app.auth().currentUser; 

    if (user !== null) { 
     // Authenticated with my app? 
     req.auth_user = user; 
     next(); 
    } else { 
     res.status(401).send({error: 'Nope'}); 
    } 
}; 

가 어떻게 내 사용자가 내 응용 프로그램에 로그인 한 명시 적 경로 처리기 내에서 알 수 있습니다 :이 같은 특급 뭔가 경로 핸들러를 가지고 싶습니다

?

답변

1

1 단계 각도. 헤더의 Firebase Auth ID 토큰을 익스프레스 엔드 포인트로 보내십시오.

postRequest() { 
    const url = 'https://your-endpoint'; 
    firebase.auth().currentUser.getIdToken() 
      .then(authToken => { 
       const headers = new Headers({'Authorization': 'Bearer ' + authToken }); 
       return this.http.post(url, { someData } , { headers }).toPromise() 
      }) 
    } 

2 단계 노드. Firebase admin SDK를 사용하여 인증 토큰을 해독합니다. verifyIdToken은 Firebase ID 토큰 (JWT)을 검증합니다. 토큰이 유효하면 약속은 토큰의 디코딩 된 클레임으로 충족됩니다. 그렇지 않으면 약속이 거부됩니다.

const admin = require('firebase-admin'); 
admin.initializeApp(yourConfig); 
const express = require('express') 
const app = express() 

app.post('/your-endpoint', (req, res) => { 

    const token = req.headers.authorization.split('Bearer ')[1] 

    return admin.auth().verifyIdToken(token) 
       .then(decodedToken => { 
        const uid = decodedToken.uid; 
        res.status(200).send('Looks good!') 

       }) 
       .catch(err => res.status(403).send('Unauthorized')) 


}); 

출처 :

https://jwt.io/

https://firebase.google.com/docs/auth/admin/verify-id-tokens https://angularfirebase.com/lessons/secure-firebase-cloud-functions/

+0

이 완벽합니다. 감사! –