Programing

Firebase 인증 사용자 만 허용하도록 Firebase Cloud Function HTTP 엔드 포인트를 보호하는 방법은 무엇입니까?

lottogame 2020. 8. 23. 09:40
반응형

Firebase 인증 사용자 만 허용하도록 Firebase Cloud Function HTTP 엔드 포인트를 보호하는 방법은 무엇입니까?


새로운 firebase 클라우드 기능을 사용하여 일부 HTTP 엔드 포인트를 firebase로 이동하기로 결정했습니다. 모든 것이 잘 작동합니다 ...하지만 다음과 같은 문제가 있습니다. HTTP 트리거 (Cloud Functions)로 빌드 된 두 개의 엔드 포인트가 있습니다.

  1. 사용자를 생성하고 Firebase Admin SDK에서 생성 한 맞춤 토큰을 반환하는 API 엔드 포인트입니다.
  2. 특정 사용자 세부 정보를 가져 오는 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));

참고 URL : https://stackoverflow.com/questions/42751074/how-to-protect-firebase-cloud-function-http-endpoint-to-allow-only-firebase-auth

반응형