OAuth 및 Google 로그인 개념 가이드 (Dialogflow)

OAuth 및 Google 로그인 연결 유형은 OAuth 기반 계정 연결 작업에서 이 연결 유형을 사용하는 경우 인증 과정이 Google 로그인으로 시작되어 사용자의 Google 로그인이 시스템에 남아 있는 것을 볼 수 있습니다. 자동으로 연결되지 않으면 표준 OAuth 흐름이 시작합니다 이 두 연결 유형을 조합하여 제공하면 사용자가 Google 또는 Google 이외의 계정으로 작업에서 자신의 신원을 공유합니다. 만약 원하는 경우 Google 프로필로 새 계정을 만들 수도 있습니다. 확인할 수 있습니다

OAuth 및 Google 로그인은 다음 사항이 적용됩니다.

  • 여러 플랫폼에 걸쳐 있는 작업이 하나 있습니다 (예: 작업은 Android 앱에서 작동합니다.
  • 기존 인증 시스템이 있고 사용자가 Google 이외의 계정과 ID 연결 예를 들어, 귀하가 고객이 멤버십을 잃지 않도록 하고 싶은 경우 기존 계정에 적립된 포인트

OAuth 및 Google 로그인이 나에게 적합한 솔루션인지 확인하려면 다음을 참고하세요. 계정 연결 유형 선택 페이지를 참고하세요.

핵심 용어

OAuth 및 Google 로그인의 작동 방식을 읽기 전에 숙지하세요. 다음 용어로 바꿉니다.

  • Google ID 토큰: 사용자 ID에 대한 서명된 어설션으로, 사용자의 기본 Google 프로필 정보 (이름, 이메일 주소, 프로필 사진) 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"
}
  • 계정 로그인 도우미 인텐트: 요청을 위해 호출하는 도우미 인텐트 어시스턴트의 계정 연결 흐름 자세한 내용은 계정 로그인.
    • 컨텍스트 문자열: 계정에 추가하는 맞춤설정된 문자열입니다. 연결하고자 하는 이유를 사용자에게 알려주는 로그인 도우미 인텐트 계정을 만들 수 있습니다.
  • 승인 코드 플로우: 다음을 사용하여 구현할 수 있는 OAuth 2.0 플로우입니다. OAuth + Google 로그인. 이 흐름에는 두 개의 엔드포인트가 필요합니다. <ph type="x-smartling-placeholder">
      </ph>
    • 승인 엔드포인트: 로그인 UI를 제공하는 엔드포인트입니다. 아직 로그인하지 않은 사용자에게 광고를 게재할 수 있습니다. 단기 승인 코드 형식으로 액세스를 요청했습니다.
    • 토큰 교환 엔드포인트: 이 엔드포인트는 두 가지 유형을 담당합니다. 수: <ph type="x-smartling-placeholder">
        </ph>
      1. 오래 지속되는 갱신 토큰과 승인 코드 교환 단기 액세스 토큰을 사용할 수 있습니다 이 교환은 사용자가 계정 연결 흐름을 거치게 됩니다.
      2. 장기 갱신 토큰을 단기 액세스로 교환 토큰입니다. Google에서 새 액세스 토큰이 필요할 때 이러한 교환이 이루어집니다. 만료되었기 때문입니다
  • 암시적 코드 흐름: Google Cloud API로 구현할 수 있는 OAuth 2.0 흐름입니다. OAuth + Google 로그인. 이 흐름에는 승인 엔드포인트만 필요합니다. 이 흐름 중에 Google은 사용자의 승인 엔드포인트에서 승인 엔드포인트를 엽니다. 있습니다. 로그인이 성공하면 수명이 긴 액세스 토큰을 Google 이제 이 액세스 토큰은 어시스턴트
  • 액세스 토큰: 서비스의 일부에 액세스할 수 있도록 권한을 부여하는 토큰입니다. 사용자의 데이터를 저장할 수 있습니다 액세스 토큰은 각 개별 사용자와 연결됩니다.
  • 갱신 토큰: 구독이 갱신될 때마다 새 액세스 토큰으로 교환되는 토큰입니다. 단기 액세스 토큰이 만료되었습니다.

기본 요건

OAuth 및 Google 로그인 연결 유형을 사용하려면 다음이 필요합니다.

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

    Google의 ID 토큰에서 자동 연결 및 계정 생성을 위한 프로토콜 (즉, 다음과 같은 요청에 intent=getintent=create 매개변수를 추가합니다. 이 엔드포인트)에 액세스할 수 있습니다.

작동 방식

이 섹션에서는 OAuth 및 Google 로그인의 일반적인 흐름을 설명합니다. 다음 OAuth 및 GSI 흐름 섹션에서 설명합니다. a) 사용 설정 또는 사용 중지 여부에 따라 발생할 수 있는 다양한 흐름을 b) 암묵적 또는 직설적 암호 해독을 사용하는지 여부 승인 코드 플로우로 이동합니다.

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

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

OAuth 및 GSI 흐름

이 섹션에서는 OAuth 및 GSI에서 발생할 수 있는 다양한 흐름을 살펴봅니다. 다음 다이어그램은 승인 코드 흐름에서 발생하는 흐름을 보여줍니다. 암시적 코드 흐름이 아니라 Dialogflow를 다음과 같이 사용한다고 가정합니다. 자연어 이해 솔루션을 만들 수 있습니다.

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

위의 흐름에서 actions.intent.SIGN_IN 도우미 인텐트를 호출합니다. 맞춤설정할 수 있습니다. 이 인텐트는 사용자에게 액세스 권한을 요청합니다. 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) 다른 제공업체로 로그인하기(a) b) 새 계정을 만들고 다르지 않습니다 OAuth 흐름에 관한 자세한 내용은 OAuth 개념 가이드

사용자 인증 정보가 확인되면 서비스에서 액세스 토큰을 반환합니다. 갱신 토큰이 Google에 전송됩니다 이제 작업의 사용자 ID가 연결되었습니다. Google 계정이 아닌 다른 계정에 연결할 수 없습니다. 사용자의 원래 요청 ('평소처럼 주문')이 일치합니다. 커스텀 인텐트 order_drink.를 호출하면 웹훅에서 일치된 인텐트를 실행하고 데이터베이스에 user@gmail.com의 일반적인 순서를 쿼리합니다. 이는 사용자가 신규이기 때문에 아직 존재하지 않습니다. 그러면 작업이 일반 주문을 설정하도록 안내합니다.