Google Identity Toolkit에서 Google Cloud Identity Platform으로 이전

Google Identity 도구 키트의 최신 버전이 Identity PlatformFirebase 인증으로 출시되었습니다. 앞으로 Identity Toolkit의 기능 작업이 중지되고 모든 새로운 기능 개발은 Identity Platform 및 Firebase 인증에서 이루어집니다. Identity Toolkit 개발자는 애플리케이션에서 필요에 따라 이 플랫폼으로 이전하는 것이 좋습니다.

새로운 기능

Identity Platform에는 이미 Google Identity 도구 키트에 비해 크게 개선된 기능이 포함되어 있습니다.

  • 새 관리 콘솔

    Identity Platform에는 사용자를 확인, 수정, 삭제할 수 있는 새 개발자 콘솔이 있습니다. 이는 로그인 및 가입 흐름을 디버깅하는 데 도움이 될 수 있습니다. 또한 콘솔을 사용하면 인증 방법을 구성하고 이메일 템플릿을 맞춤설정할 수 있습니다.

  • 새로운 인증 방법

    Identity Platform은 SAML 및 OIDC와 같은 기업 제휴 표준을 지원하므로 SaaS 앱과 서비스를 확장할 수 있습니다. Identity Platform은 GitHub, Microsoft, Yahoo 등의 제공업체에 대한 지원도 제공합니다. 익명 로그인을 사용하면 사용자에게 로그인 또는 가입 과정을 거칠 필요 없이 고유한 사용자 ID를 만들 수 있습니다. 이렇게 하면 일반 사용자를 사용할 때와 마찬가지로 인증된 API 호출을 할 수 있습니다. 사용자가 계정에 가입하기로 결정하면 모든 활동은 동일한 사용자 ID로 보존됩니다. 이는 서버 측 장바구니 또는 가입 흐름을 통해 사용자를 보내기 전에 사용자의 참여를 유도하려는 기타 애플리케이션과 같은 시나리오에서 유용합니다.

  • 서비스수준계약 및 클라우드 지원을 통해 안심하고 확장

    Identity Platform은 신뢰할 수 있는 Google 인프라를 기반으로 하며 Google Cloud의 서비스수준계약 및 지원을 제공합니다. 즉, 안심하고 서비스를 확장할 수 있으며 Google을 통해 필요한 복원력, 가용성, 확장성을 제공할 수 있습니다.

  • 모든 Firebase 액세스

    Firebase는 고품질 앱을 빠르게 개발하고 사용자층을 확장하며 더 많은 수익을 창출할 수 있게 지원하는 모바일 플랫폼입니다. Firebase는 필요에 맞게 조합하여 사용할 수 있는 보완 기능으로 구성되며 모바일 분석, 클라우드 메시징, 실시간 데이터베이스, 파일 저장소, 정적 호스팅, 원격 구성, 모바일 비정상 종료 보고, Android 테스트와 같은 인프라를 포함합니다.

  • 업데이트된 UI

    Google의 최신 UX 연구에 따라 UI 흐름을 완전히 다시 빌드했습니다. 여기에는 비밀번호 복구, 계정 연결, 코딩 및 디버그에 상당한 시간이 걸리는 신규/기존 계정 명확화 흐름이 포함됩니다. Android의 비밀번호 대용 Smart Lock을 통합하여 참여 의 로그인 및 가입 전환을 크게 개선했습니다. 또한 애플리케이션에 맞게 쉽게 테마를 수정할 수 있도록 지원하며, AndroidiOS 버전이 오픈소스로 제공되어 최대한의 맞춤설정이 가능하도록 합니다.

  • 간소화된 서버 설정

    Identity 도구 키트를 사용하면 많은 개발자가 이메일 복구 흐름을 구현하지 않아 사용자가 비밀번호를 잊어버린 경우 계정을 복구할 수 없음을 확인했습니다. Identity Platform은 이메일 확인, 비밀번호 재설정, 변경된 비밀번호 메시지를 사용자에게 전송할 수 있으며 텍스트를 사용자에 맞게 쉽게 맞춤설정할 수 있습니다. 또한 리디렉션을 호스팅하고 비밀번호 변경 작업을 완료하기 위해 UI 위젯을 더 이상 호스팅할 필요가 없습니다.

  • 새 SDK

    이제 모든 Identity Toolkit의 서버 API를 각 클라이언트 라이브러리 (Android, iOS, 웹)에서 기본적으로 사용할 수 있습니다. 개발자는 고정된 UI에 얽매이지 않고도 로그인, 이전 사용자 및 신규 사용자 등록, 사용자 속성 액세스, 계정 연결, 업데이트, 삭제, 비밀번호 재설정 등의 작업을 할 수 있습니다. 원한다면 이 API를 기반으로 전체 로그인 흐름과 환경을 수동으로 빌드할 수도 있습니다.

  • 모바일 앱의 세션 관리

    Identity 도구 키트를 사용하면 앱이 Identity Toolkit의 초기 인증 이벤트를 기반으로 자체 세션 상태를 만들었습니다. Identity Platform은 인증 이벤트로부터 발급된 갱신 토큰을 가져와 Android, iOS, JavaScript용 1시간 길이의 액세스 토큰으로 교환하는 백엔드 서비스를 사용합니다. 사용자가 비밀번호를 변경하면 갱신 토큰이 더 이상 새 액세스 토큰을 생성할 수 없으므로 사용자가 기기에서 다시 인증할 때까지 액세스가 중지됩니다.

기능 차이

일부 Identity Toolkit 기능은 현재 Identity Platform에서 사용할 수 없지만, 다른 기능은 재설계되어 다르게 작동합니다. 이러한 기능이 앱에 중요한 경우 즉시 이전하지 않도록 선택할 수 있습니다. 대부분의 경우 이러한 기능은 앱에 중요하지 않거나 이전을 진행하는 데 도움이 되는 간단한 대체 방법이 있을 수 있습니다.

서버 측 차이

기본 REST API, 계정 유효성 검사 로직, 기본 사용자 데이터베이스가 포함된 핵심 Identity 도구 키트 서비스는 소규모 업데이트만 진행되었습니다. 하지만 Identity Platform을 서비스에 통합하는 일부 기능과 방식이 변경되었습니다.

  • ID 공급업체

    PayPal 및 AOL은 지원되지 않습니다. 이러한 IDP의 계정이 있는 사용자는 비밀번호 복구 흐름을 사용하여 애플리케이션에 계속 로그인하여 계정의 비밀번호를 설정할 수 있습니다.

  • 서버 라이브러리

    현재 자바, Node.js, Python, Go, C#용으로 Admin SDK를 사용할 수 있습니다.

  • 계정 관리 이메일

    비밀번호 재설정, 이메일 인증, 이메일 변경 메시지는 Firebase 또는 개발자의 자체 메일 서버에서 수행할 수 있습니다. 현재 이메일 템플릿은 UI에서 제한된 맞춤설정만 제공하지만 Admin SDK를 사용하여 추가로 맞춤설정할 수 있습니다.

  • 이메일 주소 변경 확인

    Identity Toolkit에서 사용자가 이메일 주소를 변경하기로 결정하면 이메일 주소 변경 흐름을 계속할 수 있는 링크가 있는 새 주소로 이메일을 보냅니다.

    Firebase는 변경사항을 되돌리는 링크가 포함된 취소 이메일을 이전 이메일 주소로 전송하여 이메일 주소 변경을 확인합니다.

  • IDP 출시

    Identity Toolkit에는 ID 공급업체를 로그인 시스템에 점진적으로 추가할 수 있으므로 지원 요청에 미치는 영향을 실험할 수 있습니다. 이 기능은 Firebase 인증에서 삭제되었습니다.

클라이언트 측 차이점

Identity Platform에서 Google Identity 도구 키트가 제공하는 기능은 두 가지 구성요소로 나뉩니다.

  • 클라이언트 및 서버 SDK

    Identity Platform에서는 Identity Toolkit의 REST API가 제공하는 기능이 Android, iOS, 자바스크립트에 사용할 수 있는 클라이언트 SDK에 패키징되어 있습니다. REST 호출을 통해 백엔드 서비스와 통신하는 대신 SDK를 사용하여 사용자 로그인 및 가입, 사용자 프로필 정보 액세스, 계정 연결, 업데이트, 삭제, 계정 연결, 업데이트, 삭제, 비밀번호 재설정과 같은 작업을 수행할 수 있습니다.

  • UI 위젯

    로그인, 가입, 비밀번호 복구, 계정 연결을 관리하는 모든 UI 흐름이 클라이언트 SDK를 사용하여 다시 빌드되어 로그인 위젯으로 패키징되었습니다. iOS, Android, 용 오픈소스 SDK로 제공되며 Identity Toolkit으로는 불가능한 방식으로 흐름을 완전히 맞춤설정할 수 있습니다.

그 밖의 차이점은 다음과 같습니다.

  • 세션 및 이전

    Identity Toolkit과 Identity Platform에서 세션이 다르게 관리되므로 SDK를 업그레이드하면 사용자의 기존 세션이 종료되고 사용자가 다시 로그인해야 합니다.

시작하기 전에

Identity Toolkit에서 Identity Platform으로 이전하려면 먼저 다음 작업을 해야 합니다.

  1. Cloud Console을 열고 Identity Toolkit 프로젝트를 선택합니다.

  2. Marketplace에서 Identity Platform으로 이동하고 'Identity Platform 사용 설정'을 선택합니다.

  3. 서비스 계정 페이지를 엽니다. 여기에서 이전에 Identity 도구 키트에 구성한 서비스 계정을 확인할 수 있습니다.

  4. 서비스 계정 옆에 있는 > 키 만들기를 클릭합니다. 그런 다음 비공개 키 만들기 대화상자에서 키 유형을 JSON으로 설정하고 만들기를 클릭합니다. 서비스 계정의 사용자 인증 정보가 포함된 JSON 파일이 다운로드됩니다. 다음 단계에서 SDK를 초기화하는 데 필요합니다.

  5. Cloud Console로 돌아갑니다. 제공업체 섹션의 '이메일/비밀번호' 로그인 방법 내에서 이메일 템플릿 페이지를 엽니다. 그런 다음 앱의 템플릿을 맞춤설정할 수 있습니다.

    Identity 도구에서는 사용자가 비밀번호를 재설정하거나 이메일 주소를 변경하거나 이메일 주소를 확인할 때 Identity Toolkit 서버에서 OOB 코드를 가져온 후 이메일을 통해 사용자에게 코드를 전송해야 했습니다. Identity Platform은 추가 작업 없이 구성된 템플릿을 기반으로 이메일을 전송합니다.

  6. 선택사항: 서버에서 Identity Platform 서비스에 액세스해야 하는 경우 Firebase SDK를 설치합니다.

    1. npm로 Node.js Admin SDK를 설치할 수 있습니다.

      $ npm init
      $ npm install --save firebase-admin
      
    2. 코드에서 다음을 사용하여 Firebase에 액세스할 수 있습니다.

      var admin = require('firebase-admin');
      var app = admin.initializeApp({
        credential: admin.credential.cert('path/to/serviceAccountCredentials.json')
      });
      

그런 다음 앱 플랫폼(Android, iOS, )에 대한 이전 단계를 완료합니다.

서버 및 자바스크립트

주요 변경사항

Identity Platform의 웹 구현에는 Identity 도구 키트와 다른 여러 차이점이 있습니다.

  • 웹 세션 관리

    이전에는 사용자가 Identity Toolkit 위젯을 사용하여 인증하면 세션을 부트스트랩하는 데 사용된 사용자에 대해 쿠키가 설정되었습니다. 이 쿠키는 수명이 2주이며 사용자가 계정 관리 위젯을 사용하여 비밀번호와 이메일 주소를 변경할 수 있도록 하는 데 사용되었습니다. 일부 사이트는 이 쿠키를 사용하여 사이트의 다른 모든 페이지 요청을 인증했습니다. 다른 사이트에서는 이 쿠키를 사용하여 프레임워크의 쿠키 관리 시스템을 통해 자체 쿠키를 만들었습니다.

    이제 Identity Platform 클라이언트 SDK가 ID 토큰을 관리하고 Identity Platform의 백엔드와 함께 작업하여 세션을 최신 상태로 유지합니다. 백엔드는 중요한 계정 변경 (예: 사용자 비밀번호 변경)이 발생하면 세션을 만료시킵니다. ID 토큰은 웹 클라이언트에서 쿠키로 자동 설정되지 않으며 전체 기간이 1시간에 불과합니다. 1시간 세션만 원하는 경우가 아니면 ID 토큰을 모든 페이지 요청을 검증하는 쿠키로 사용하는 것은 적절하지 않습니다. 대신 사용자가 로그인할 때 사용할 리스너를 설정하고, ID 토큰을 가져오고, 토큰의 유효성을 검사하고, 프레임워크의 쿠키 관리 시스템을 통해 자체 쿠키를 만들어야 합니다.

    애플리케이션의 보안 요구사항에 따라 쿠키의 세션 수명을 설정해야 합니다.

  • 웹 로그인 흐름

    이전에는 사용자가 사용하려는 식별자를 확인하기 위해 로그인이 시작되면 사용자가 accountchooser.com로 리디렉션되었습니다. 이제 Identity Platform UI의 흐름이 웹용 accountchooser.com로 이동하고 Android에서 hintRequest API를 사용하는 이메일 옵션을 포함한 로그인 방법 목록으로 시작됩니다. 또한 UI에서 이메일 주소가 더 이상 필요하지 않습니다. 이렇게 하면 익명 사용자, 커스텀 인증 사용자 또는 이메일 주소가 필요하지 않은 제공업체의 사용자를 더 쉽게 지원할 수 있습니다.

  • 계정 관리 위젯

    이 위젯은 사용자가 이메일 주소를 변경하거나 비밀번호를 변경하거나 ID 공급업체에서 계정을 연결 해제할 수 있는 UI를 제공합니다. 현재 개발 중입니다.

  • 로그인 버튼/위젯

    로그인 버튼, 사용자 카드와 같은 위젯은 더 이상 제공되지 않습니다. Firebase Authentication API를 사용하여 매우 쉽게 빌드할 수 있습니다.

  • signOutUrl 없음

    firebase.auth.signOut()를 호출하고 콜백을 처리해야 합니다.

  • oobActionUrl 없음

    이제 이메일 전송이 Identity Platform에서 처리되며 Firebase Console에서 구성됩니다.

  • CSS 맞춤설정

    UI 위젯은 Material Design 애니메이션을 동적으로 추가하는 Material Design Lite 스타일을 사용합니다.

1단계: 서버 코드 변경

  1. 서버가 웹 사용자 세션을 관리하기 위해 Identity 도구 토큰 (2주 동안 유효)을 사용하는 경우 자체 세션 쿠키를 사용하도록 서버를 변환해야 합니다.

    1. ID 토큰을 검증하고 사용자의 세션 쿠키를 설정하기 위한 엔드포인트를 구현합니다. 클라이언트 앱이 이 엔드포인트로 Firebase ID 토큰을 전송합니다.
    2. 수신 요청에 자체 세션 쿠키가 포함되어 있으면 사용자가 인증된 것으로 간주할 수 있습니다. 그렇지 않으면 요청을 인증되지 않은 것으로 처리합니다.
    3. 사용자가 기존 로그인 세션을 잃지 않도록 하려면 모든 Identity Toolkit 토큰이 만료될 때까지 2주 동안 기다리거나 아래 3단계에 설명된 대로 웹 애플리케이션에 대한 이중 토큰 검증을 수행해야 합니다.
  2. 다음으로, ID 토큰이 Identity Toolkit 토큰과 다르기 때문에 토큰 유효성 검사 로직을 업데이트해야 합니다. 서버에 Admin SDK를 설치합니다. 또는 Admin SDK에서 지원하지 않는 언어를 사용하는 경우 사용자 환경에 맞는 JWT 토큰 검증 라이브러리를 다운로드하고 올바르게 토큰을 검증합니다.

  3. 위의 업데이트를 처음 수행할 때 Identity Toolkit 토큰을 사용하는 코드 경로가 있을 수 있습니다. iOS 또는 Android 애플리케이션이 있는 경우 새 코드 경로가 작동하려면 새 버전의 앱으로 업그레이드해야 합니다. 사용자가 앱을 강제로 업데이트하지 않도록 하려면 토큰을 검사하고 Firebase SDK 또는 Identity Toolkit SDK를 사용하여 토큰의 유효성을 검사하는 서버 유효성 검사 로직을 추가할 수 있습니다. 웹 애플리케이션만 있는 경우 모든 새 인증 요청이 Identity Platform으로 이동되므로 ID 토큰 확인 방법만 사용하면 됩니다.

웹 API 참조를 확인하세요.

2단계: HTML 업데이트

  1. 앱에 초기화 코드를 추가합니다.

    1. Cloud Console에서 프로젝트를 엽니다.
    2. 제공업체 페이지에서 애플리케이션 설정 세부정보를 클릭합니다. Identity Platform을 초기화하는 코드 스니펫이 표시됩니다.
    3. 초기화 스니펫을 복사하여 웹페이지에 붙여넣습니다.
  2. 앱에 인증 위젯을 추가합니다.

    <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>
    
  3. 앱에서 Identity Toolkit SDK를 삭제합니다.

  4. 세션 관리를 위해 Identity 도구 키트 ID 토큰을 사용한 경우 클라이언트 측에서 다음과 같이 변경해야 합니다.

    1. Identity Platform에 로그인한 후 firebase.auth().currentUser.getToken()를 호출하여 ID 토큰을 가져옵니다.

    2. ID 토큰을 백엔드 서버로 전송하여 유효성을 검사하고 자체 세션 쿠키를 발급합니다.

      민감한 작업을 실행하거나 서버에 인증된 수정 요청을 전송할 때는 세션 쿠키에만 의존하지 마세요. 또한 교차 사이트 요청 위조 (CSRF) 보호를 추가로 제공해야 합니다.

      프레임워크에서 CSRF 보호를 제공하지 않는 경우 공격을 방지하는 한 가지 방법은 getToken()로 로그인한 사용자의 ID 토큰을 가져오고 각 요청에 이 토큰을 포함하는 것입니다 (세션 쿠키도 기본적으로 전송됨). 그런 다음 백엔드 프레임워크에서 완료한 세션 쿠키 검사와 함께 Admin SDK를 사용하여 토큰의 유효성을 검사합니다. 이렇게 하면 ID 토큰이 웹 스토리지를 통해서만 저장되고 쿠키에는 저장되지 않으므로 CSRF 공격이 성공하기가 더 어려워집니다.

    3. ID 툴킷 토큰은 2주 동안 유효합니다. 2주간 지속된 토큰을 계속 발급하거나 앱의 보안 요구사항에 따라 토큰을 더 길거나 더 짧게 만들 수 있습니다. 사용자가 로그아웃할 때 세션 쿠키를 지웁니다.

3단계: IDP 리디렉션 URL 업데이트

  1. Cloud Console에서 제공업체 섹션을 엽니다.

  2. 지원하는 각 제휴 로그인 제공업체에 대해 다음을 수행합니다.

    1. 로그인 제공업체의 이름을 클릭합니다.
    2. OAuth 리디렉션 URI를 복사합니다.
    3. 로그인 제공업체의 개발자 콘솔에서 OAuth 리디렉션 URI를 업데이트합니다.

Android

1단계: Firebase로 앱에 Identity Platform 추가

  1. Cloud Console을 열고 Identity Toolkit 프로젝트를 선택합니다.

  2. 제공업체 페이지에서 애플리케이션 설정 세부정보를 클릭하고 Android 탭을 선택한 후 Firebase 시작하기를 클릭합니다. Firebase 추가 대화상자에서 앱의 패키지 이름과 서명 인증서 지문을 입력하고 앱 추가를 클릭합니다. 그러면 google-services.json 구성 파일이 컴퓨터에 다운로드됩니다.

  3. 구성 파일을 Android 앱 모듈 루트 디렉터리에 복사합니다. 이 구성 파일에는 프로젝트 및 Google OAuth 클라이언트 정보가 포함되어 있습니다.

  4. 프로젝트 수준 build.gradle 파일(<var>your-project</var>/build.gradle)의 defaultConfig 섹션에 앱의 패키지 이름을 지정합니다.

    defaultConfig {
       …..
      applicationId "com.your-app"
    }
    
  5. 또한 프로젝트 수준 build.gradle 파일에 google-services 플러그인을 포함할 종속 항목을 추가합니다.

    buildscript {
     dependencies {
       // Add this line
       classpath 'com.google.gms:google-services:3.0.0'
     }
    }
    
  6. 앱의 앱 수준 build.gradle 파일(<var>my-project</var>/<var>app-module</var>/build.gradle)에서 Android Gradle 플러그인 뒤에 다음 줄을 추가하여 google-services 플러그인을 사용 설정합니다.

    apply plugin: 'com.android.application'
    // Add this line
    apply plugin: 'com.google.gms.google-services'
    

    google-services 플러그인은 google-services.json 파일을 사용하여 Firebase를 사용하도록 애플리케이션을 구성합니다.

  7. 또한 앱 수준 build.gradle 파일에 Firebase 인증 종속 항목을 추가합니다.

    compile 'com.google.firebase:firebase-auth:22.3.1'
    compile 'com.google.android.gms:play-services-auth:21.0.0'
    

2단계: Identity Toolkit SDK 삭제하기

  1. AndroidManifest.xml 파일에서 Identity Toolkit 구성을 삭제합니다. 이 정보는 google-service.json 파일에 포함되며 google-services 플러그인에 의해 로드됩니다.
  2. 앱에서 Identity Toolkit SDK를 삭제합니다.

3단계: 앱에 FirebaseUI 추가

  1. 앱에 FirebaseUI 인증을 추가합니다.

  2. 앱에서 Identity Toolkit SDK 호출을 FirebaseUI 호출로 바꿉니다.

iOS

1단계: 앱에 Firebase 추가

  1. 다음 명령어를 실행하여 클라이언트 SDK를 앱에 추가합니다.

    $ cd your-project directory
    $ pod init
    $ pod 'Firebase'
    
  2. Cloud Console을 열고 Identity Toolkit 프로젝트를 선택합니다.

  3. 제공업체 페이지에서 애플리케이션 설정 세부정보를 클릭하고 iOS 탭을 선택한 후 Firebase 시작하기를 클릭합니다. Firebase 추가 대화상자에서 앱의 패키지 이름과 서명 인증서 지문을 입력하고 앱 추가를 클릭합니다. 그러면 google-services.json 구성 파일이 컴퓨터에 다운로드됩니다. Firebase 추가 대화상자에서 앱의 번들 ID와 App Store ID를 입력한 후 앱 추가를 클릭합니다. 그러면 GoogleService-Info.plist 구성 파일이 컴퓨터에 다운로드됩니다. 프로젝트에 번들 ID가 여러 개 있으면 자체 GoogleService-Info.plist 파일을 가질 수 있도록 각 번들 ID를 Firebase Console에서 연결해야 합니다.

  4. 구성 파일을 Xcode 프로젝트의 루트에 복사하여 모든 대상에 추가합니다.

2단계: Identity Toolkit SDK 삭제하기

  1. 앱의 Podfile에서 GoogleIdentityToolkit을 삭제합니다.
  2. pod install 명령어를 실행합니다.

3단계: 앱에 FirebaseUI 추가

  1. 앱에 FirebaseUI 인증을 추가합니다.

  2. 앱에서 Identity Toolkit SDK 호출을 FirebaseUI 호출로 바꿉니다.