Firebase 인증 사용자 만 허용하도록 Firebase Cloud Function HTTP 엔드 포인트를 보호하는 방법은 무엇입니까?
새로운 firebase 클라우드 기능을 사용하여 일부 HTTP 엔드 포인트를 firebase로 이동하기로 결정했습니다. 모든 것이 잘 작동합니다 ...하지만 다음과 같은 문제가 있습니다. HTTP 트리거 (Cloud Functions)로 빌드 된 두 개의 엔드 포인트가 있습니다.
- 사용자를 생성하고 Firebase Admin SDK에서 생성 한 맞춤 토큰을 반환하는 API 엔드 포인트입니다.
- 특정 사용자 세부 정보를 가져 오는 API 엔드 포인트.
첫 번째 끝점은 괜찮지 만 두 번째 끝점의 경우 인증 된 사용자에 대해서만 보호하고 싶습니다. 내가 이전에 생성 한 토큰을 가진 사람을 의미합니다.
이 문제를 해결하려면 어떻게해야합니까?
클라우드 함수에서 헤더 매개 변수를 가져올 수 있다는 것을 알고 있습니다.
request.get('x-myheader')
하지만 실시간 데이터베이스를 보호하는 것처럼 엔드 포인트를 보호 할 수있는 방법이 있습니까?
수행하려는 작업에 대한 공식 코드 샘플 이 있습니다. 설명하는 것은 클라이언트가 인증 중에받은 토큰과 함께 Authorization 헤더를 요구하도록 HTTPS 기능을 설정하는 방법입니다. 이 함수는 firebase-admin 라이브러리를 사용하여 토큰을 확인합니다.
또한 앱에서 Firebase 클라이언트 라이브러리를 사용할 수있는 경우 ' 호출 가능 함수 '를 사용하여이 상용구를 더 쉽게 만들 수 있습니다.
@Doug에서 언급했듯이 firebase-admin
토큰을 확인하는 데 사용할 수 있습니다 . 간단한 예를 설정했습니다.
exports.auth = functions.https.onRequest((req, res) => {
cors(req, res, () => {
const tokenId = req.get('Authorization').split('Bearer ')[1];
return admin.auth().verifyIdToken(tokenId)
.then((decoded) => res.status(200).send(decoded))
.catch((err) => res.status(401).send(err));
});
});
위의 예에서는 CORS도 활성화했지만 선택 사항입니다. 먼저 Authorization
헤더 를 얻고 token
.
그런 다음을 사용 firebase-admin
하여 해당 토큰을 확인할 수 있습니다 . 응답에서 해당 사용자에 대한 디코딩 된 정보를 얻을 수 있습니다. 그렇지 않으면 토큰이 유효하지 않으면 오류가 발생합니다.
도움이되기를 바랍니다.
@Doug에서도 언급했듯이 클라이언트와 서버에서 일부 상용구 코드 를 제외 하기 위해 Callable Functions 를 사용할 수 있습니다 .
호출 가능한 함수 예 :
export const getData = functions.https.onCall((data, context) => {
// verify Firebase Auth ID token
if (!context.auth) {
return { message: 'Authentication Required!', code: 401 };
}
// do your things..
const uid = context.auth.uid;
const query = data.query;
return { message: 'Some Data', code: 400 };
});
다음과 같이 클라이언트에서 직접 호출 할 수 있습니다.
firebase.functions().httpsCallable('getData')({query}).then(result => console.log(result));
'Programing' 카테고리의 다른 글
내 중단 점이 작동하지 않는 이유는 무엇입니까? (0) | 2020.08.24 |
---|---|
CSV를 SQLite로 가져 오기 (0) | 2020.08.23 |
PHP의 다중 상속 (0) | 2020.08.23 |
모든 텍스트 기반 필드에 일반 varchar (255)를 사용하는 데 단점이 있습니까? (0) | 2020.08.23 |
SQL Server- "sys.functions"는 어디에 있습니까? (0) | 2020.08.23 |