Google Identity Toolkit의 최신 버전이 Firebase 인증으로 출시되었습니다. 앞으로는 Identity Toolkit의 기능 작업이 동결되고 모든 새로운 기능 개발이 Firebase 인증에서 이루어집니다. Identity Toolkit 개발자는 애플리케이션에 실용적인 경우 최대한 빨리 Firebase 인증으로 전환하는 것이 좋습니다. 하지만 Identity Toolkit은 계속 작동하며 추가 공지 없이 지원 중단되지 않습니다.
새로운 기능
Firebase 인증은 이미 Google Identity Toolkit에 비해 몇 가지 중요한 기능이 향상되었습니다.
모든 Firebase에 액세스
Firebase는 고품질 앱을 빠르게 개발하고 사용자층을 확장하며 더 많은 수익을 창출할 수 있는 모바일 플랫폼입니다. Firebase는 필요에 따라 조합할 수 있는 보완 기능으로 구성되며 모바일 애널리틱스, 클라우드 메시징, 실시간 데이터베이스, 파일 저장소, 정적 호스팅, 원격 구성, 모바일 비정상 종료 보고, Android 테스트를 위한 인프라를 포함합니다.
업데이트된 UI
Google의 최신 UX 연구를 기반으로 UI 흐름을 완전히 재구성했습니다. 여기에는 비밀번호 복구, 계정 연결, 코딩 및 디버그하는 데 상당한 시간이 걸리는 신규/기존 계정 구분 흐름이 포함됩니다. Android에서 비밀번호 대용 Smart Lock을 통합하여 참여 앱의 로그인 및 가입 전환을 크게 개선했습니다. 또한 애플리케이션에 맞게 테마를 쉽게 수정할 수 있으며 최대한의 맞춤설정을 위해 Android 및 iOS 버전이 오픈소스로 제공됩니다.
간소화된 서버 설정
개발자가 Firebase 인증을 더 쉽게 사용할 수 있도록 했습니다. Identity Toolkit을 사용하면 많은 개발자가 이메일 복구 흐름을 구현하지 않아 사용자가 비밀번호를 잊어버린 경우 계정을 복구할 수 없었습니다. Firebase 인증은 사용자에게 이메일 인증, 비밀번호 재설정, 비밀번호 변경 메시지를 보낼 수 있으며, 텍스트는 사용자를 위해 쉽게 맞춤설정할 수 있습니다. 또한 리디렉션을 호스팅하고 비밀번호 변경 작업을 완료하기 위해 더 이상 UI 위젯을 호스팅하지 않아도 됩니다.
새로운 관리 콘솔
Firebase에는 새로운 개발자 콘솔이 있으며 인증 섹션에서 사용자를 보고, 수정하고, 삭제할 수 있습니다. 이렇게 하면 로그인 및 가입 흐름을 디버깅하는 데 큰 도움이 됩니다. 또한 Console을 사용하여 인증 방법을 구성하고 이메일 템플릿을 맞춤설정할 수 있습니다.
새로운 SDK
이제 Identity Toolkit의 모든 서버 API를 각 클라이언트 라이브러리 (Android, iOS, 웹)에서 기본적으로 사용할 수 있습니다. 개발자는 고정된 UI에 연결되지 않고도 기존 사용자와 신규 사용자를 로그인 및 가입하고, 사용자 속성에 액세스하고, 계정을 연결, 업데이트, 삭제하고, 비밀번호를 재설정할 수 있습니다. 원하는 경우 이 API를 기반으로 전체 로그인 흐름과 환경을 직접 빌드할 수 있습니다.
모바일 앱의 세션 관리
Identity Toolkit을 사용하면 앱이 Identity Toolkit의 초기 인증 이벤트를 기반으로 자체 세션 상태를 만들었습니다. Firebase 인증은 인증 이벤트에서 생성된 갱신 토큰을 사용하여 Android, iOS, JavaScript용 1시간 길이의 액세스 토큰으로 교환하는 백엔드 서비스를 사용합니다. 사용자가 비밀번호를 변경하면 갱신 토큰으로 더 이상 새 액세스 토큰을 생성할 수 없으므로 사용자가 해당 기기에서 재인증할 때까지 액세스가 사용 중지됩니다.
익명 및 GitHub 인증
Firebase 인증은 GitHub 및 익명의 두 가지 새로운 인증 유형을 지원합니다. 익명 로그인을 사용하면 사용자가 로그인 또는 가입 절차를 거칠 필요 없이 고유한 사용자 ID를 만들 수 있습니다. 이제 익명의 사용자를 사용하여 일반 사용자와 마찬가지로 인증된 API를 호출할 수 있습니다. 사용자가 계정에 가입하면 모든 활동이 동일한 사용자 ID로 보존됩니다. 이는 서버 측 장바구니나 가입 절차를 통해 사용자를 보내기 전에 사용자의 참여를 유도하려는 애플리케이션과 같은 상황에 적합합니다.
기능 차이
일부 Identity Toolkit 기능은 현재 Firebase 인증에서 사용할 수 없으며, 다른 기능은 디자인이 변경되어 다르게 작동합니다. 이러한 기능이 앱에 중요한 경우 즉시 이전하지 않을 수도 있습니다. 대부분의 경우 이러한 기능이 앱에 중요하지 않거나 이전을 진행할 수 있는 간단한 대체 방법이 있을 수 있습니다.
서버 측 차이
기본 REST API, 계정 유효성 검사 로직, 기본 사용자 데이터베이스가 포함된 핵심 Identity Toolkit 서비스는 일부만 업데이트되었습니다. 하지만 일부 기능과 Firebase 인증을 서비스에 통합하는 방식이 변경되었습니다.
ID 공급업체
PayPal 및 AOL은 지원되지 않습니다. 이러한 IDP의 계정을 사용하는 사용자는 비밀번호 복구 흐름을 사용하여 애플리케이션에 로그인하고 계정의 비밀번호를 설정할 수 있습니다.
서버 라이브러리
현재 Java, Node.js, Python, Go, C#용 Firebase Admin SDK가 있습니다.
계정 관리 이메일
비밀번호 재설정, 이메일 인증, 이메일 변경 메시지는 Firebase에서 실행하거나 개발자 자체 메일 서버에서 실행할 수 있습니다. 현재 Firebase 이메일 템플릿은 제한적으로만 맞춤설정할 수 있습니다.
이메일 주소 변경 확인
Identity Toolkit에서 사용자가 이메일 주소를 변경하기로 결정하면 이메일 주소 변경 흐름을 계속할 수 있는 링크가 포함된 이메일이 새 주소로 전송됩니다.
Firebase는 변경사항을 되돌릴 수 있는 링크가 포함된 취소 이메일을 이전 이메일 주소로 전송하여 이메일 주소 변경을 확인합니다.
IDP 출시
Identity Toolkit에는 지원 요청에 미치는 영향을 실험할 수 있도록 로그인 시스템에 ID 공급자를 점진적으로 추가하는 기능이 있었습니다. 이 기능은 Firebase 인증에서 삭제되었습니다.
클라이언트 측 차이
Firebase에서 Google ID 도구 키트에서 제공하는 기능은 다음 두 가지 구성요소로 나뉩니다.
Firebase 인증 SDK
Firebase 인증에서는 Identity Toolkit의 REST API에서 제공하는 기능이 Android, iOS, JavaScript에서 사용할 수 있는 클라이언트 SDK에 패키징되었습니다. SDK를 사용하여 사용자를 로그인 및 가입시키고, 사용자 프로필 정보에 액세스하고, 계정을 연결, 업데이트, 삭제하고, REST 호출을 통해 백엔드 서비스와 통신하는 대신 클라이언트 SDK를 사용하여 비밀번호를 재설정할 수 있습니다.
FirebaseUI 인증
로그인, 가입, 비밀번호 복구, 계정 연결을 관리하는 모든 UI 흐름이 Firebase 인증 SDK를 사용하여 다시 빌드되었습니다. iOS 및 Android용 오픈소스 SDK로 제공되므로 Identity Toolkit에서는 불가능한 방식으로 흐름을 완전히 맞춤설정할 수 있습니다.
추가 차이점은 다음과 같습니다.
세션 및 이전
Identity Toolkit과 Firebase 인증에서 세션이 다르게 관리되므로 SDK를 업그레이드하면 사용자의 기존 세션이 종료되고 사용자가 다시 로그인해야 합니다.
시작하기 전에
Identity Toolkit에서 Firebase 인증으로 이전하려면 먼저 다음을 실행해야 합니다.
Firebase Console을 열고 Google 프로젝트 가져오기를 클릭한 다음 Identity Toolkit 프로젝트를 선택합니다.
settings > 권한을 클릭하여 IAM 및 관리자 페이지를 엽니다.
서비스 계정 페이지를 엽니다. 여기에서 이전에 Identity Toolkit에 구성한 서비스 계정을 확인할 수 있습니다.
서비스 계정 옆에 있는 more_vert > 키 만들기를 클릭합니다. 그런 다음 비공개 키 만들기 대화상자에서 키 유형을 JSON으로 설정하고 만들기를 클릭합니다. 서비스 계정의 사용자 인증 정보가 포함된 JSON 파일이 자동으로 다운로드됩니다. 다음 단계에서 SDK를 초기화하려면 이 파일이 필요합니다.
Firebase Console로 돌아갑니다. 인증 섹션에서 이메일 템플릿 페이지를 엽니다. 이 페이지에서 앱의 이메일 템플릿을 맞춤설정합니다.
Identity Toolkit에서 사용자가 비밀번호를 재설정하고, 이메일 주소를 변경하고, 이메일 주소를 인증하면 개발자는 Identity Toolkit 서버에서 OOB 코드를 가져와 이메일을 통해 사용자에게 코드를 전송해야 했습니다. Firebase는 구성한 템플릿을 기반으로 이메일을 전송하며 추가 작업이 필요하지 않습니다.
선택사항: 서버에서 Firebase 서비스에 액세스해야 하는 경우 Firebase SDK를 설치합니다.
npm
를 사용하여 Firebase Node.js 모듈을 설치할 수 있습니다.$ npm init $ npm install --save firebase-admin
코드에서 다음을 사용하여 Firebase에 액세스할 수 있습니다.
var admin = require('firebase-admin'); var app = admin.initializeApp({ credential: admin.credential.cert('path/to/serviceAccountCredentials.json') });
그런 다음 앱의 플랫폼(Android, iOS, 웹)에 맞는 이전 단계를 완료합니다.
서버 및 JavaScript
주요 변경사항
Firebase의 웹 구현은 Identity Toolkit과 여러 가지 점에서 다릅니다.
웹 세션 관리
이전에는 사용자가 ID 도구 키트 위젯을 사용하여 인증하면 사용자에 대해 세션을 부트스트랩하는 데 사용되는 쿠키가 설정되었습니다. 이 쿠키의 전체 기간은 2주이며 사용자가 계정 관리 위젯을 사용하여 비밀번호와 이메일 주소를 변경할 수 있도록 하는 데 사용되었습니다. 일부 사이트에서는 이 쿠키를 사용하여 사이트의 다른 모든 페이지 요청을 인증했습니다. 다른 사이트에서는 이 쿠키를 사용하여 프레임워크의 쿠키 관리 시스템을 통해 자체 쿠키를 만들었습니다.
이제 Firebase 클라이언트 SDK가 Firebase ID 토큰을 관리하고 Firebase 인증의 백엔드와 협력하여 세션을 최신 상태로 유지합니다. 백엔드는 중요한 계정 변경사항 (예: 사용자 비밀번호 변경)이 발생하면 세션을 만료합니다. Firebase ID 토큰은 웹 클라이언트에서 쿠키로 자동 설정되지 않으며 전체 기간이 1시간입니다. 1시간 동안만 세션을 사용하려는 경우가 아니라면 Firebase ID 토큰은 모든 페이지 요청을 확인하는 쿠키로 사용하기에 적합하지 않습니다. 대신 사용자가 로그인할 때 리스너를 설정하고 Firebase ID 토큰을 가져오고 토큰을 확인한 다음 프레임워크의 쿠키 관리 시스템을 통해 자체 쿠키를 만들어야 합니다.
애플리케이션의 보안 요구사항에 따라 쿠키의 세션 전체 기간을 설정해야 합니다.
웹 로그인 흐름
이전에는 사용자가 사용하려는 식별자를 알아보기 위해 로그인이 시작되면
accountchooser.com
로 리디렉션되었습니다. 이제 Firebase Auth UI의 흐름은 웹의accountchooser.com
로 이동하고 Android에서 hintRequest API를 사용하는 이메일 옵션을 비롯한 로그인 방법 목록으로 시작됩니다. 또한 Firebase UI에서 이메일 주소가 더 이상 필요하지 않습니다. 이렇게 하면 익명 사용자, 맞춤 인증 사용자 또는 이메일 주소가 필요하지 않은 제공업체의 사용자를 더 쉽게 지원할 수 있습니다.계정 관리 위젯
이 위젯은 사용자가 이메일 주소를 변경하거나, 비밀번호를 변경하거나, ID 제공업체에서 계정 연결을 해제할 수 있는 UI를 제공합니다. 이 프로그램은 현재 개발 중입니다.
로그인 버튼/위젯
로그인 버튼 및 사용자 카드와 같은 위젯은 더 이상 제공되지 않습니다. Firebase Authentication API를 사용하여 매우 쉽게 빌드할 수 있습니다.
signOutUrl 없음
firebase.auth.signOut()
를 호출하고 콜백을 처리해야 합니다.oobActionUrl 없음
이제 이메일 전송은 Firebase에서 처리하며 Firebase Console에서 구성합니다.
CSS 맞춤설정
FirebaseUI는 Material Design 애니메이션을 동적으로 추가하는 Material Design Lite 스타일을 사용합니다.
1단계: 서버 코드 변경
서버가 웹 사용자 세션을 관리하기 위해 Identity Toolkit 토큰 (2주 동안 유효)을 사용하는 경우 서버를 자체 세션 쿠키를 사용하도록 변환해야 합니다.
- Firebase ID 토큰을 확인하고 사용자의 세션 쿠키를 설정하기 위한 엔드포인트를 구현합니다. 클라이언트 앱은 Firebase ID 토큰을 이 엔드포인트로 전송합니다.
- 수신 요청에 자체 세션 쿠키가 포함된 경우 사용자를 인증된 것으로 간주할 수 있습니다. 그렇지 않으면 요청을 인증되지 않은 것으로 처리합니다.
- 사용자가 기존 로그인 세션을 잃지 않도록 하려면 모든 Identity Toolkit 토큰이 만료될 때까지 2주를 기다리거나 아래 3단계에 설명된 대로 웹 애플리케이션에 이중 토큰 유효성 검사를 실행해야 합니다.
다음으로, Firebase 토큰은 Identity Toolkit 토큰과 다르므로 토큰 유효성 검사 로직을 업데이트해야 합니다. 서버에 Firebase Server SDK를 설치합니다. 또는 Firebase Server SDK에서 지원하지 않는 언어를 사용하는 경우 환경에 맞는 JWT 토큰 유효성 검사 라이브러리를 다운로드하고 적절하게 토큰을 유효성 검사합니다.
위의 업데이트를 처음 실행할 때는 Identity Toolkit 토큰을 사용하는 코드 경로가 여전히 있을 수 있습니다. iOS 또는 Android 애플리케이션이 있는 경우 새 코드 경로가 작동하려면 사용자가 새 버전의 앱으로 업그레이드해야 합니다. 사용자에게 앱을 업데이트하도록 강제하지 않으려면 토큰을 검사하고 토큰을 확인하는 데 Firebase SDK 또는 Identity Toolkit SDK를 사용해야 하는지 결정하는 서버 유효성 검사 로직을 추가할 수 있습니다. 웹 애플리케이션만 있는 경우 모든 새 인증 요청이 Firebase로 전환되므로 Firebase 토큰 확인 메서드만 사용하면 됩니다.
Firebase Web API 참조를 참고하세요.
2단계: HTML 업데이트
앱에 Firebase 초기화 코드를 추가합니다.
- Firebase Console에서 프로젝트를 엽니다.
- 개요 페이지에서 앱 추가를 클릭한 다음 웹 앱에 Firebase 추가를 클릭합니다. Firebase를 초기화하는 코드 스니펫이 표시됩니다.
- 초기화 스니펫을 웹페이지에 복사하여 붙여넣습니다.
앱에 FirebaseUI Auth를 추가합니다.
<script src="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.js"></script> <link type="text/css" rel="stylesheet" href="https://www.gstatic.com/firebasejs/ui/live/0.4/firebase-ui-auth.css" /> <!-- ******************************************************************************************* * TODO(DEVELOPER): Paste the initialization snippet from: * Firebase Console > Overview > Add Firebase to your web app. * ***************************************************************************************** --> <script type="text/javascript"> // FirebaseUI config. var uiConfig = { 'signInSuccessUrl': '<url-to-redirect-to-on-success>', 'signInOptions': [ // Leave the lines as is for the providers you want to offer your users. firebase.auth.GoogleAuthProvider.PROVIDER_ID, firebase.auth.FacebookAuthProvider.PROVIDER_ID, firebase.auth.TwitterAuthProvider.PROVIDER_ID, firebase.auth.GithubAuthProvider.PROVIDER_ID, firebase.auth.EmailAuthProvider.PROVIDER_ID ], // Terms of service url. 'tosUrl': '<your-tos-url>', }; // Initialize the FirebaseUI Widget using Firebase. var ui = new firebaseui.auth.AuthUI(firebase.auth()); // The start method will wait until the DOM is loaded. ui.start('#firebaseui-auth-container', uiConfig); </script>
앱에서 Identity Toolkit SDK를 삭제합니다.
세션 관리에 Identity Toolkit ID 토큰을 사용했다면 클라이언트 측에서 다음을 변경해야 합니다.
Firebase에 정상적으로 로그인한 후
firebase.auth().currentUser.getToken()
를 호출하여 Firebase ID 토큰을 가져옵니다.Firebase ID 토큰을 백엔드 서버로 전송하고 유효성을 검사한 후 자체 세션 쿠키를 발행합니다.
민감한 작업을 실행하거나 서버에 인증된 수정 요청을 전송할 때는 세션 쿠키에만 의존하지 마세요. 크로스 사이트 요청 위조 (CSRF) 보호를 추가로 제공해야 합니다.
프레임워크에서 CSRF 보호를 제공하지 않는 경우 공격을 방지하는 한 가지 방법은
getToken()
를 사용하여 로그인한 사용자의 Firebase ID 토큰을 가져와 각 요청에 토큰을 포함하는 것입니다 (세션 쿠키도 기본적으로 전송됨). 그런 다음 백엔드 프레임워크에서 완료한 세션 쿠키 확인 외에도 Firebase 서버 SDK를 사용하여 토큰을 확인합니다. 이렇게 하면 Firebase ID 토큰이 웹 스토리지를 사용하여 저장되고 쿠키에는 저장되지 않으므로 CSRF 공격이 성공하기가 더 어려워집니다.Identity Toolkit 토큰은 2주 동안 유효합니다. 2주 동안 지속되는 토큰을 계속 발급하거나 앱의 보안 요구사항에 따라 더 길거나 짧게 설정할 수 있습니다. 사용자가 로그아웃하면 세션 쿠키를 삭제합니다.
3단계: IdP 리디렉션 URL 업데이트
Firebase Console에서 인증 섹션을 열고 로그인 방법 탭을 클릭합니다.
지원하는 각 제휴 로그인 제공업체에 대해 다음을 실행합니다.
- 로그인 제공업체의 이름을 클릭합니다.
- OAuth 리디렉션 URI를 복사합니다.
- 로그인 제공업체의 개발자 콘솔에서 OAuth 리디렉션 URI를 업데이트합니다.
Android
1단계: 앱에 Firebase 추가
Firebase Console을 열고 이미 가져온 Identity Toolkit 프로젝트를 선택합니다.
개요 페이지에서 앱 추가를 클릭한 다음 Android 앱에 Firebase 추가를 클릭합니다. Firebase 추가 대화상자에서 앱의 패키지 이름과 서명 인증서 지문을 입력하고 앱 추가를 클릭합니다. 그러면
google-services.json
구성 파일이 컴퓨터에 다운로드됩니다.구성 파일을 Android 앱 모듈 루트 디렉터리에 복사합니다. 이 구성 파일에는 프로젝트 및 Google OAuth 클라이언트 정보가 포함됩니다.
프로젝트 수준
build.gradle
파일(<var>your-project</var>/build.gradle
)의defaultConfig
섹션에서 앱의 패키지 이름을 지정합니다.defaultConfig { ….. applicationId "com.your-app" }
또한 프로젝트 수준
build.gradle
파일에서 google-services 플러그인을 포함하는 종속 항목을 추가합니다.buildscript { dependencies { // Add this line classpath 'com.google.gms:google-services:3.0.0' } }
앱의 앱 수준
build.gradle
파일(<var>my-project</var>/<var>app-module</var>/build.gradle
) 하단에 다음 줄을 추가하여 google-services 플러그인을 사용 설정합니다.// Add to the bottom of the file apply plugin: 'com.google.gms.google-services'
google-services 플러그인은
google-services.json
파일을 사용하여 Firebase를 사용하도록 애플리케이션을 구성합니다.또한 앱 수준
build.gradle
파일에서 Firebase 인증 종속 항목을 추가합니다.compile 'com.google.firebase:firebase-auth:23.1.0' compile 'com.google.android.gms:play-services-auth:21.3.0'
2단계: Identity Toolkit SDK 삭제
AndroidManifest.xml
파일에서 Identity Toolkit 구성을 삭제합니다. 이 정보는google-service.json
파일에 포함되어 있으며 google-services 플러그인에 의해 로드됩니다.- 앱에서 Identity Toolkit SDK를 삭제합니다.
3단계: 앱에 FirebaseUI 추가
앱에 FirebaseUI Auth를 추가합니다.
앱에서 Identity Toolkit SDK 호출을 FirebaseUI 호출로 바꿉니다.
iOS
1단계: 앱에 Firebase 추가
다음 명령어를 실행하여 앱에 Firebase SDK를 추가합니다.
$ cd your-project directory $ pod init $ pod 'Firebase'
Firebase Console을 열고 이미 가져온 Identity Toolkit 프로젝트를 선택합니다.
개요 페이지에서 앱 추가를 클릭한 다음 iOS 앱에 Firebase 추가를 클릭합니다. Firebase 추가 대화상자에서 앱의 번들 ID와 App Store ID를 입력한 다음 앱 추가를 클릭합니다. 그러면
GoogleService-Info.plist
구성 파일이 컴퓨터에 다운로드됩니다. 프로젝트에 번들 ID가 여러 개 있으면 각 번들 ID에 자체GoogleService-Info.plist
파일이 포함되도록 Firebase Console에서 연결해야 합니다.구성 파일을 Xcode 프로젝트의 루트에 복사하고 모든 타겟에 추가합니다.
2단계: Identity Toolkit SDK 삭제
- 앱의 Podfile에서
GoogleIdentityToolkit
를 삭제합니다. pod install
명령어를 실행합니다.
3단계: 앱에 FirebaseUI 추가
앱에 FirebaseUI Auth를 추가합니다.
앱에서 Identity Toolkit SDK 호출을 FirebaseUI 호출로 바꿉니다.