Firebase private key 에러

Dongwon Ahn·2023년 1월 30일
0

에러 회고

목록 보기
4/6
post-thumbnail
post-custom-banner

Firebase를 프로젝트 연동하기 위해 json 파일을 내려받을 수 있습니다.

주로 해당 json 파일을 보안적인 문제로 그대로 올리지 않고, .env파일에 설정을 하고 사용을 합니다.

최근 배포 시에 private key 관련되서 에러가 났는데, 평소 사용했던 방법으로 해결이 되지 않았습니다.

관련 검색 시 다양한 에러 해결방법이 존재하나, 환경 별로 해결되는 방법이 다른 것 같아 이번에 시도했던 여러 방법들을 정리하고자 합니다.

💡 참고사항
Azure App Service 에서 Next.js Typescript를 사용한 프로젝트 였습니다.

발생한 에러

local에서 정상 실행되던 프로젝트가 배포시에 failed to parse private key: Error: Invalid PEM formatted message 에러 메세지를 발생하면서 Firebase 연동이 되지 않았습니다.

Firebase의 private key 는 아래와 같이 \n를 여러개 가지고 있는 key 값입니다.

-----BEGIN PRIVATE KEY-----\nMIIEabcdefu......Eh0SQ==\n-----END PRIVATE KEY-----\n

에러가 발생하는 원인은 key가 배포 시에 \n 즉 개행이 적용이 되지 않아서 발생한다고 파악하였습니다.

실제 아래 로그와 같이 개행이 적용안된 것을 볼 수 있습니다.

  • 정상실행 시 로그
    • log를 확인하면 아래 이미지와 같이 개행이 적용된 것을 알 수 있습니다.
      (이미지는 보안 상 일부 가린 점 양해부탁드립니다.)
  • 에러가 난 경우 로그
    • key가 개행이 제대로 적용이 되지 않는 것을 알 수 있습니다.

해결방법들

💡 아래 나온 해결방법들은 일부 환경에서는 안될 수도 있으니, 참고부탁드립니다.

  1. replace
    env가 string처리되어 안되는 경우 해결방법으로 다양한 경우가 있습니다.
    ```jsx
    process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/g, '\n');
    process.env.FIREBASE_PRIVATE_KEY.replace(/\n/g, '\n');
    process.env.FIREBASE_PRIVATE_KEY.replace(/\n/gm, '\n');
    process.env.FIREBASE_PRIVATE_KEY.replace(/\\n/gm, '\n');
    ```
  2. Buffer
    Base64로 encoding된 key인 경우 아래 방법으로 해결이 가능합니다.
    ```jsx
    Buffer.from(process.env.FIREBASE_PRIVATE_KEY).toString();
    ```
  3. JSON.parse
    필자가 진행했던 방법으로 환경변수에 “” 처리를 진행한 후 json.parse를 처리합니다.
    ```jsx
    JSON.parse(process.env.FIREBASE_PRIVATE_KEY);
    ```

참고 문서

https://github.com/gladly-team/next-firebase-auth#get-started

https://firebase.google.com/docs/reference/js/v8/firebase#initializeapp

https://github.com/gladly-team/next-firebase-auth/discussions/95

profile
Typescript를 통해 풀스택 개발을 진행하고 있습니다.
post-custom-banner

0개의 댓글