OAuth 기반 Google 로그인의 '간소화된' 연결 개념 가이드

OAuth 기반 Google 로그인의 '간소화된' 연결 유형은 OAuth 기반 계정 연결에 더해 Google 로그인을 추가합니다. 작업에서 이 연결 유형을 사용하면 Google 로그인으로 흐름이 시작되어 사용자의 Google 프로필 정보가 시스템에 있는지 확인할 수 있습니다. 그렇지 않으면 표준 OAuth 흐름이 시작됩니다. 이 두 연결 유형의 조합을 제공하면 사용자가 작업에서 Google 또는 Google 이외의 계정과 ID를 연결할 수 있습니다. 원하는 경우 Google 프로필 정보를 사용하여 새 계정을 만들 수도 있습니다.

간소화된 연결은 다음 중 하나라도 해당되는 경우 권장되는 계정 연결 솔루션입니다.

  • 여러 플랫폼에 걸쳐 있는 작업이 있습니다 (예: 작업이 Android 앱에서 작동하는 경우).
  • 기존 인증 시스템이 있으며 사용자가 자신의 ID를 Google 이외의 계정과 연결하도록 허용하려고 합니다. 예를 들어 포인트 제도를 제공하고 사용자가 기존 계정에서 누적된 포인트가 사라지지 않도록 하려는 경우입니다.

간소화된 연결이 적합한 솔루션인지 확인하려면 계정 연결 유형 선택 페이지를 참고하세요.

핵심 용어

간소화된 연결의 작동 방식을 알아보기 전에 다음 용어를 숙지하세요.

  • Google ID 토큰: 사용자의 기본 Google 프로필 정보 (이름, 이메일 주소, 프로필 사진)를 포함하는 사용자 ID의 서명된 어설션입니다. Google ID 토큰은 JSON 웹 토큰(JWT)입니다. 다음은 디코딩된 토큰의 예입니다.
{
  "sub": 1234567890,        // The unique ID of the user's Google Account
  "iss": "https://accounts.google.com",        // The token's issuer
  "aud": "123-abc.apps.googleusercontent.com", // Client ID assigned to your Actions project
  "iat": 233366400,         // Unix timestamp of the token's creation time
  "exp": 233370000,         // Unix timestamp of the token's expiration time
  "name": "Jan Jansen",
  "given_name": "Jan",
  "family_name": "Jansen",
  "email": "jan@gmail.com", // If present, the user's email address
  "locale": "en_US"
}
  • user.verificationStatus: 현재 세션에 인증된 사용자가 있는지 나타내기 위해 시스템에서 설정한 속성입니다.

  • user.accountLinkingStatus: 현재 세션의 사용자에게 연결된 ID가 있는지 나타내기 위해 시스템에서 설정한 속성입니다.

  • 계정 연결 시스템 장면: 계정 연결을 위한 확인 흐름을 구현하는 사전 정의된 장면이며 특정 사용 사례에 맞게 맞춤설정할 수 있습니다.

  • 승인 코드 흐름: 간소화된 연결을 사용하여 구현할 수 있는 OAuth 2.0 흐름입니다. 이 흐름에는 2개의 엔드포인트가 필요합니다.

    • 승인 엔드포인트: 아직 로그인하지 않은 사용자에게 로그인 UI를 표시하는 엔드포인트입니다. 요청된 액세스에 대한 동의를 단기 승인 코드 형식으로 기록합니다.
    • 토큰 교환 엔드포인트: 이 엔드포인트는 두 가지 유형의 교환을 담당합니다.
      1. 수명이 긴 갱신 토큰과 수명이 짧은 액세스 토큰으로 승인 코드를 교환합니다. 이러한 교환은 사용자가 계정 연결 흐름을 진행할 때 발생합니다.
      2. 수명이 긴 갱신 토큰을 수명이 짧은 액세스 토큰으로 교환합니다. 교환은 액세스 토큰이 만료되어 Google이 새로운 액세스 토큰을 필요로 할 때 발생합니다.
  • 암시적 코드 흐름: 간소화된 연결을 사용하여 구현할 수 있는 OAuth 2.0 흐름입니다. 이 흐름에는 승인 엔드포인트만 있으면 됩니다. 이 흐름에서 Google은 사용자의 브라우저에서 승인 엔드포인트를 엽니다. 로그인이 성공하면 유효 기간이 긴 액세스 토큰이 Google에 반환됩니다. 이제 이 액세스 토큰이 어시스턴트에서 작업으로 전송되는 모든 요청에 포함됩니다.

  • 액세스 토큰: 사용자 데이터의 일부에 액세스할 수 있도록 서비스를 승인하는 토큰입니다. 액세스 토큰은 각 개별 사용자와 연결됩니다.

  • 갱신 토큰: 단기 액세스 토큰이 만료되면 새 액세스 토큰으로 교환되는 토큰입니다.

기본 요건

간소화된 연결 유형을 사용하려면 다음이 필요합니다.

  • OAuth 2.0 서버
  • 토큰 교환 엔드포인트

    토큰 교환 엔드포인트를 확장하여 ID 토큰에서 자동 연결 및 계정 생성을 위한 Google 프로토콜을 지원해야 합니다(즉, 이 엔드포인트에 대한 요청에 intent=getintent=create 매개변수 추가).

사용 방법

이 섹션에서는 간소화된 연결을 위한 일반적인 흐름을 설명합니다. 이어지는 간소화된 연결 흐름 섹션에서는 a) 음성을 통한 계정 생성 사용 설정 여부 및 b) 암시적 또는 승인 코드 흐름의 사용 여부에 따라 발생할 수 있는 다양한 흐름을 설명합니다.

기본 흐름은 다음과 같습니다.

  1. 작업이 사용자에게 Google 프로필에 액세스하는 데 동의를 요청합니다.
  2. 사용자가 동의하면 작업이 사용자의 Google 프로필 정보가 포함된 Google ID 토큰을 수신합니다.
  3. 프로필 콘텐츠를 읽으려면 토큰의 유효성을 검사하고 디코딩해야 합니다.
  4. 작업이 이 토큰을 사용하여 사용자의 Google 프로필 정보가 시스템에 있는지 확인합니다.
    1. 연결되어 있다면 사용자는 이미 Google 계정으로 시스템에 로그인한 것이며 어시스턴트는 사용자의 ID를 Google 계정에 연결합니다. 사용자는 계정이 연결된 상태에서 어시스턴트와 계속 대화할 수 있습니다.
    2. 표시되지 않으면 5단계를 참조하세요.
  5. 사용자는 a) Google 프로필 정보로 새 계정을 만들거나 b) 다른 계정으로 시스템에 로그인할 수 있습니다. 사용자에게 제공되는 옵션은 음성을 통한 계정 만들기의 사용 설정 여부에 따라 다릅니다. 사용자가 다른 계정으로 시스템에 로그인하기로 선택하면 표준 OAuth 흐름이 시작됩니다.
  6. 사용자가 새 계정을 만들거나 다른 제공업체로 로그인하면 서비스에서 Google에 액세스 토큰을 반환합니다. 승인 코드 흐름을 사용 중인 경우 서비스에서 갱신 토큰도 반환합니다.
  7. 이제 사용자는 계정이 연결된 상태에서 어시스턴트와 대화를 이어갈 수 있습니다.

간소화된 연결 흐름

이 섹션에서는 간소화된 연결에서 발생할 수 있는 다양한 흐름을 설명합니다. 이 다이어그램은 암시적 코드 흐름이 아닌 승인 코드 흐름에서 발생하는 흐름을 확인하며 Actions Builder를 사용한다고 가정합니다.

각 흐름에는 사용자가 작업을 호출한 후의 일반적인 단계가 포함됩니다.

위의 흐름에서 계정 연결 시스템 장면으로 전환하고 맞춤설정된 근거를 제공합니다. 장면에서 사용자에게 Google 프로필 정보에 액세스할 수 있는 권한을 요청합니다. 사용자가 동의하면 어시스턴트는 user@gmail.com의 프로필 정보가 포함된 요청을 전송합니다.

이 시점 이후의 흐름은 음성으로 연결되는 계정을 구성했는지 여부와 사용자 정보가 시스템에 이미 존재하는지에 따라 달라집니다. 이러한 각 흐름은 다음 섹션에 설명되어 있습니다.

음성 계정 만들기가 사용 설정된 흐름

이 섹션에서는 음성을 통한 계정 생성을 사용 설정하는 경우 발생할 수 있는 계정 연결 흐름을 자세히 설명합니다.

흐름 1: 사용자 정보가 시스템에 존재함

이 경우 user@gmail.com로 표시되는 사용자가 백엔드에 있으므로 토큰 교환 엔드포인트는 사용자의 토큰을 반환합니다. 이제 작업에서 사용자의 ID가 Google 계정에 연결됩니다. 사용자의 원래 요청 ('주문 평소대로 주문')이 사용자 인텐트와 일치합니다. order_drink. 그러면 웹훅이 일치된 인텐트의 처리를 처리하고 데이터베이스에 user@gmail.com의 일반적인 순서를 쿼리합니다. 그러면 사용자는 어시스턴트와의 대화를 계속할 수 있습니다.

흐름 2: 사용자 정보가 존재하지 않으며 사용자가 계정 생성

음성을 통한 계정 생성을 사용 설정했지만 백엔드에 user@gmail.com가 없으므로 어시스턴트는 사용자에게 다음 중 하나를 할지 묻습니다.

a) Google 프로필 정보를 사용하여 시스템에서 새 계정을 만듭니다. 이 작업은 음성으로 이루어집니다.

b) 다른 계정으로 시스템에 로그인합니다.

이 경우 사용자는 음성을 통해 새 계정을 만들기로 선택합니다. Google은 계정 생성 요청으로 서비스의 토큰 교환 엔드포인트를 호출합니다. 이 요청에는 새 계정을 만드는 데 필요한 구성요소가 포함된 Google ID 토큰이 포함됩니다. 그런 다음 이 토큰의 정보(사용자 이름 및 이메일 주소)를 사용하여 사용자의 계정을 만들 수 있습니다.

계정이 생성되면 서비스가 새로 생성된 계정의 액세스 토큰과 갱신 토큰을 반환합니다. 이제 작업의 사용자 ID가 Google 계정에 연결됩니다. 사용자의 원래 요청 ('주문으로도 주문 가능')이 사용자 인텐트 order_drink.와 일치합니다. 그러면 웹훅이 일치된 인텐트의 처리를 처리하고 사용자가 신규 사용자이므로 아직 존재하지 않는 user@gmail.com의 평상시 순서를 데이터베이스에 쿼리합니다. 그러면 작업이 사용자에게 무엇을 주문할지 물어볼 수 있습니다.

흐름 3: 사용자 정보가 존재하지 않으며 사용자가 다른 계정으로 로그인함

음성을 통한 계정 생성을 사용 설정했으므로 어시스턴트가 사용자에게 다음 중 하나를 할지 묻습니다.

a) Google 프로필 정보를 사용하여 시스템에서 새 계정을 만듭니다. 이 작업은 음성으로 이루어집니다.

b) 다른 계정으로 시스템에 로그인합니다.

이 경우 사용자가 다른 계정으로 로그인하도록 선택하면 표준 OAuth 흐름이 시작됩니다. 음성 전용 기기에서 흐름이 시작된 경우 Google은 실행을 휴대전화로 전송합니다. 그러면 Google이 사용자의 브라우저에서 승인 엔드포인트를 열고 구성에 따라 사용자는 a) Google 로그인을 사용하지 않는 기존 계정으로 서비스에 로그인할지 또는 b) 다른 제공업체를 사용하여 새 계정을 만들지 선택할 수 있습니다. OAuth 흐름에 대한 자세한 내용은 OAuth 연결 개념 가이드를 참조하세요.

사용자의 사용자 인증 정보를 확인한 후 서비스에서 액세스 토큰과 갱신 토큰을 Google에 반환합니다. 이제 작업의 사용자 ID가 Google 외 계정에 연결됩니다. 사용자의 원래 요청 ('주문으로 간주')이 사용자 인텐트 order_drink.와 일치합니다. 그러면 웹훅이 일치된 인텐트의 처리를 처리하고 사용자가 신규 사용자이므로 아직 존재하지 않는 user@gmail.com의 평상시 순서를 데이터베이스에 쿼리합니다. 그러면 작업에서 사용자에게 무엇을 주문할지 묻거나 일반적인 주문을 설정하도록 요청할 수 있습니다.

음성 계정 생성이 사용 중지된 흐름

이 섹션에서는 음성을 통한 계정 생성을 사용 중지하는 경우 발생할 수 있는 계정 연결 흐름을 자세히 설명합니다.

흐름 4: 사용자 정보가 존재하지 않음

음성을 통해 계정 생성을 사용 설정하지 않았고 사용자가 백엔드에 없으므로 표준 OAuth 흐름이 시작됩니다. 어시스턴트는 사용자의 브라우저에서 승인 엔드포인트를 엽니다. 음성 전용 기기에서 흐름이 시작된 경우 Google에서 화면이 있는 기기로 실행을 전송합니다. 사용자는 a) 다른 계정으로 서비스에 등록한 경우 다른 제공업체로 로그인하거나 b) 다른 제공업체로 새 계정을 만들 수 있습니다. OAuth 흐름에 대한 자세한 내용은 OAuth 연결 개념 가이드를 참조하세요.

사용자의 사용자 인증 정보를 확인한 후 서비스에서 액세스 토큰과 갱신 토큰을 Google에 반환합니다. 이제 작업의 사용자 ID가 Google 외 계정에 연결됩니다. 사용자의 원래 요청 ('주문으로 간주')이 사용자 인텐트 order_drink.와 일치합니다. 그러면 웹훅이 일치된 인텐트의 처리를 처리하고 사용자가 신규 사용자이므로 아직 존재하지 않는 user@gmail.com의 평상시 순서를 데이터베이스에 쿼리합니다. 그러면 작업에서 사용자에게 평소의 주문을 설정하도록 요청할 수 있습니다.