Firebase Authentication은 토큰 인증을 사용하는 이야기

요 전날 Firebase를 이용하여 Vue.js에서 만든 SPA(Single Page Application)에 인증 기능을 폭속으로 구현한 적이 있었다. ( 소스 코드는 여기 ) ( 움직이는 앱은 여기 )

Firebase가 제공하는 공식 자바스크립트용 SDK을 사용하여 1시간과 100행 이내의 구현으로 인증 기능을 만들 수 있었다.

이 기사에서는 Firebase SDK의 뒷면을 탐구하고 Firebase Authentication의 구조를 이해하고 구현한 소감을 설명한다.

Firebase Authentication의 토큰 인증 메커니즘



Firebase Authentication은 스테이트리스 토큰 인증을 채용하고 있다. 스테이트리스라는 것은 지금 어느 유저가 로그인중인지의 상태를 Firebase 백엔드측이 관리하고 있지 않는 것.

인증 성공 후 Firebase Authentication은 토큰을 발행하여 브라우저의 IndexedDB에 저장합니다.

IndexedDB에 대해서는 LocalStorage의 상위 버전이라고 이해하고 있다. LocalStorage에서는 Key=Value 페어와 같이 캐릭터 라인 밖에 보존할 수 없는 것에 대해, IndexedDB에서는 JSON 오브젝트등도 용이하게 취급할 수 있다.

IndexedDB에 저장된 데이터를 실제로 보여주면


stsTokenManager의 속성에 accessTokenrefreshToken가 있음을 알 수 있습니다. 여기 accessToken는 내부 이름이고 공식 이름은 Firebase ID Token이라고합니다. ( h tps : // s t c ゔ ぇ rf ぉ w. 코 m/쿠에 s치온 s/50192454

Firebase ID Token은 Firebase Authentication의 백엔드에 의해, 인증 프로바이더가 제공하는 유저명, 패스워드등의 인증 정보와 앞으로 발행한 것으로, 유효기간이 짧고, 디폴트에서는 1시간이 되고 있다. 만료되면 Refresh Token을 사용하여 새로운 ID Token을 발행할 수 있습니다.

ID Token은 JWT(JSON Web Token) 사양이다. htps : // jwt. 이오/에서 토큰을 디코딩하면,



페이로드에 Uid, 사용자 이름 및 인증 공급자 정보가 있음을 알 수 있습니다.

토큰 인증에 대한 인상



토큰 인증 상태 비저항의 특성은 Firebase의 서비스 또는 여러 백엔드 서비스 사이에 사용자 정보를 공유하는 데 매우 도움이 된다는 것을 깨달았습니다.

Firebase의 예를 들면 Firestore(Firebase에서 제공하는 NoSQL 데이터스토어)에 특정 데이터는 작성자인 본인만 읽을 수 있다는 규칙을 구현한 경우 읽기 요청의 발신자의 신분을 확인한다. 필요합니다.

Firebase Authentication에서 인증 기능을 구현한 경우, 읽기 요청의 헤더에 ID Token을 포함하는 것만으로, 데이터 스토어측은 토큰을 검증해, 송신 유저를 특정할 수 있다.

또, 상기와 같은 느낌으로, Firebase Admin SDK를 이용하여 자작 서버 등에서도 로그인 유저를 특정하는 것이 용이하게 실장할 수 있다. ( 자세한 내용은 공식 문서 )

참고

좋은 웹페이지 즐겨찾기