Cloudflare 작업자의 Firebase 인증

Firebase는 사용하기 매우 쉽습니다. 제공된 SDK는 거의 모든 언어와 플랫폼에서 사용할 수 있습니다. 현재 누락된 것은 웹용 Admin SDK입니다.

실제로 Javascript에서 사용할 수 있지만 Node에서 실행되도록 빌드되었습니다. 표준 웹 API를 사용하는 이 플랫폼을 지원하지 않는 일부 환경이 있습니다.

그 중 하나가 Cloudflare Workers입니다. 이러한 작업자에서 Node용 Admin SDK를 사용하려고 하면 누락된 라이브러리 때문에 작동하지 않습니다.

요점은 현재 개인 프로젝트에 사용할 필요가 절실하다는 것입니다. 이미 구현된 솔루션을 찾기 위해 인터넷 서핑을 시작했습니다.

그래서 나만의 도서관을 짓기로 했다.

flarebase-auth를 소개합니다



라이브러리 이름에서 알 수 있듯이 인증 부분만 다루고 있습니다.

저는 fetch() 및 WebCrypto와 같은 표준 웹 API를 사용했습니다. 내가 해야 했던 가장 일반적인 일은 JWT 토큰 생성/검증이었습니다. 저는 jose 라이브러리(프로젝트의 유일한 종속성)를 사용했는데, 이는 크로스 플랫폼이고 WebCrypto API와도 작동하기 때문입니다.
flarebase-auth는 매우 간단하며 주로 google-oauth.tsflarebase-auth.ts의 두 파일로 작성됩니다.

google-oauth.ts

Google OAuth 2.0 토큰의 유효성 검사 및 생성과 관련된 모든 코드는 이 파일에 기록됩니다. 거의 모든 요청이 인증되어야 하므로 이를 상당히 광범위하게 사용했습니다.

OAuth 2.0 토큰 생성은 2단계 프로세스입니다. 먼저 Google 서비스 계정 개인 키로 JWT 토큰에 서명합니다. 그런 다음 이 JWT를 https://oauth2.googleapis.com/token에 전달하고 액세스 토큰을 검색합니다. 프로세스는 getAuthToken() 메서드로 구현됩니다.

flarebase-auth.ts

이것은 실제 핵심 라이브러리가 있는 곳입니다. 목표는 Firebase Admin SDK에서 일반적으로 getAuth()와 함께 사용하는 모든 방법을 구현하는 것입니다.

지금은 기본 로그인/가입 시스템을 구축하는 데 충분하므로 다음 방법만 작성했습니다.
  • createSessionCookie()
  • verifySessionCookie()
  • signInWithEmailAndPassword()
  • signUpWithEmailAndPassword()
  • changePassword()
  • lookupUser()

  • 라이브러리 사용



    어떻게 사용할 수 있습니까? 다음은 예제입니다. FlarebaseAuth 인스턴스를 생성하여 시작하겠습니다.

    import { FlarebaseAuth } from 'flarebase-auth';
    
    const auth = new FlarebaseAuth({
      apiKey: 'Firebase api key',
      projectId: 'Firebase project id',
      privateKey: 'Firebase private key or service account private key',
      serviceAccountEmail: 'Firebase service account email',
    });
    


    이제 실제 작업을 수행할 준비가 되었습니다! 예를 들어 이메일과 비밀번호로 사용자를 로그인하는 방법은 다음과 같습니다.

    //Sign in with username and password
    const { token, user } = await auth.signInWithEmailAndPassword(
      '[email protected]',
      'supersecurepassword'
    );
    
    const userEmail = user.email;
    const refreshToken = token.refreshToken;
    


    라이브러리는 더미 사용자와 더미 Firebase 프로젝트를 사용하여 테스트되었습니다. 나중에 저는 특히 디버깅 목적으로 만들어진 Firebase 인증 에뮬레이터가 있다는 것을 발견했습니다.
    지금은 테스트 Firebase 프로젝트를 고수하고 다른 방법을 계속 구현하겠습니다. 이 기능을 추가하고 싶다면 풀 리퀘스트를 생성하는 것을 환영합니다!
    flarebase-auth는 캐싱도 지원합니다. CloudflareKv를 사용하여 만료될 때까지 OAuth 2.0 토큰을 자동으로 저장할 수 있습니다.

    import { FlarebaseAuth, CloudflareKv } from 'flarebase-auth';
    
    const auth = new FlarebaseAuth({
      apiKey: 'Firebase api key',
      projectId: 'Firebase project id',
      privateKey: 'Firebase private key or service account private key',
      serviceAccountEmail: 'Firebase service account email',
    
      cache: new CloudflareKv(NAMESPACE);
    });
    


    flarebase-auth의 다음 단계



    현재 프로젝트에 이 라이브러리를 성공적으로 사용하고 있지만 아직 구현해야 할 개선 사항과 새로운 기능이 많이 있습니다. 추가하고 싶은 목록은 다음과 같습니다.
  • 공개 키에 대한 캐싱 지원 확장(토큰 검증)
  • sendEmailVerification() 구현
  • ConfirmEmailVerification() 구현
  • deleteAccount() 구현

  • 연결


    flarebase-authNPMGitHub Packages에서 사용할 수 있습니다. 이 프로젝트는 완전히 오픈 소스이며 MIT 라이센스가 있으므로 원하는 대로 하세요! 기여를 환영합니다 🥳
  • GitHub: https://github.com/Marplex/flarebase-auth
  • Firebase Auth REST API documentation
  • 좋은 웹페이지 즐겨찾기