계정 연결 API

이 참조 페이지에서는 서비스가 Google과의 계정 연결을 지원하기 위해 구현해야 하는 API 엔드포인트를 설명합니다. 여기에는 OAuth 기반 계정 연결, 간소화된 계정 연결, 앱 플립이 포함됩니다.

기본 요건 및 표준

이러한 엔드포인트를 성공적으로 구현하려면 서비스가 다음 표준을 준수해야 합니다.

  • OAuth 2.0: RFC 6749를 준수합니다.
  • 토큰 취소: RFC 7009를 준수합니다.
  • JSON 웹 토큰 (JWT): RFC 7519를 준수합니다 (간소화된 연결에 필요).
  • HTTPS: 모든 엔드포인트는 보안 HTTPS 연결을 통해 제공되어야 합니다.

승인 엔드포인트

승인 엔드포인트는 사용자를 인증하고 Google과 계정을 연결하는 데 동의를 얻는 역할을 합니다.

  • URL: Actions Console 또는 Google Cloud Console에서 구성됩니다.
  • 메서드: GET

요청 매개변수

매개변수 설명
client_id Google에 할당한 클라이언트 ID입니다.
redirect_uri 이 요청에 대한 응답을 전송할 URL입니다.
state 리디렉션 URI에서 변경되지 않은 상태로 Google에 다시 전달되는 회계 값입니다.
response_type 승인 코드 플로우의 경우 code여야 합니다.
scope (선택사항) Google에서 요청하는 데이터의 범위를 공백으로 구분한 목록입니다.
user_locale (선택사항) Google 계정 언어 설정입니다. BCP-47 언어 태그 (예: en-US)를 사용하여 지정됩니다.

토큰 교환 엔드포인트

이 엔드포인트는 승인 코드를 토큰으로 교환하고 만료된 액세스 토큰을 갱신하는 역할을 합니다.

  • URL: Actions Console 또는 Google Cloud Console에서 구성됩니다.
  • 메서드: POST
  • Content-Type: application/x-www-form-urlencoded

승인 코드를 토큰으로 교환

초기 토큰 교환 요청에는 다음 매개변수가 사용됩니다.

요청 매개변수

매개변수 설명
client_id Google에 할당한 클라이언트 ID입니다.
client_secret Google에 할당한 클라이언트 보안 비밀번호입니다.
grant_type authorization_code이어야 합니다.
code 승인 엔드포인트에서 수신한 승인 코드입니다.
redirect_uri 초기 요청에 사용된 것과 동일한 리디렉션 URI입니다.

갱신 토큰을 액세스 토큰으로 교환

액세스 토큰을 새로고침할 때는 다음 매개변수가 사용됩니다.

요청 매개변수

매개변수 설명
client_id Google에 할당한 클라이언트 ID입니다.
client_secret Google에 할당한 클라이언트 보안 비밀번호입니다.
grant_type refresh_token이어야 합니다.
refresh_token 이전에 Google에 발급된 갱신 토큰입니다.

응답 (JSON)

HTTPS 응답 본문에 JSON 객체가 포함된 성공 응답을 반환합니다.

  • HTTP 상태: 200 OK
  • Content-Type: application/json;charset=UTF-8
필드 설명
token_type 필수사항. bearer여야 합니다.
access_token 필수사항. 서비스의 API에 액세스하는 데 사용되는 단기 토큰입니다.
refresh_token authorization_code grant_type에 필요합니다. 새 액세스 토큰을 획득하는 데 사용되는 장기 토큰입니다.
expires_in 필수사항. 액세스 토큰의 남은 수명(초)입니다.

오류 응답

토큰 엔드포인트에 대한 요청이 실패하면 다음 필드가 포함된 JSON 응답과 함께 HTTP 400 Bad Request 오류를 반환합니다.

  • HTTP 상태: 400 Bad Request
  • Content-Type: application/json;charset=UTF-8
오류 필드 (JSON) 설명
error 필수사항. invalid_grant여야 합니다.
error_description (선택사항) 추가 정보를 제공하는 사람이 읽을 수 있는 텍스트입니다.

간소화된 연결 인텐트 처리

서비스가 간소화된 계정 연결 (Google로 로그인하는 OAuth)을 지원하는 경우 토큰 교환 엔드포인트는 JSON 웹 토큰 (JWT) 어설션을 추가로 지원하고 check, create, get 인텐트를 구현해야 합니다.

이러한 요청에는 다음 매개변수가 사용됩니다.

요청 매개변수

매개변수 설명
intent 요청되는 구체적인 간소화된 연결 인텐트입니다(check, get 또는 create).
grant_type 이러한 요청의 경우 이 매개변수의 값은 항상 urn:ietf:params:oauth:grant-type:jwt-bearer입니다.
assertion Google 사용자의 ID에 대한 서명된 어설션을 제공하는 JSON 웹 토큰 (JWT)입니다. JWT에는 사용자의 Google 계정 ID, 이름, 이메일 주소가 포함된 정보가 포함됩니다.

서버는 JWT 검증 섹션에 나열된 기준을 사용하여 이 JWT를 검증해야 합니다.
client_id Google에 할당한 클라이언트 ID입니다.
client_secret Google에 할당한 클라이언트 보안 비밀번호입니다.
scope 선택사항: Google이 사용자에게 요청하도록 구성한 범위입니다. 일반적으로 getcreate 의도 중에 표시됩니다.
response_type create 의도에 필요: token로 설정해야 합니다.

JWT 검증

간소화된 연결의 보안을 보장하려면 서버가 다음 기준을 사용하여 assertion (JWT)를 검증해야 합니다.

  • 서명: Google의 JWK 엔드포인트에서 제공되는 Google의 공개 키에 대해 서명을 확인합니다.
  • 발급기관 (iss): https://accounts.google.com여야 합니다.
  • 잠재고객 (aud): 통합에 할당된 Google API 클라이언트 ID와 일치해야 합니다.
  • 만료 (exp): 미래여야 합니다.

check 인텐트에 대한 응답

intent=check가 포함된 요청은 디코딩된 JWT 어설션의 sub 또는 email 클레임으로 식별되는 Google 계정이 사용자 데이터베이스에 있는지 확인합니다.

  • HTTP 상태: 200 OK (계정 있음) 또는 404 Not Found (계정 없음)
  • Content-Type: application/json;charset=UTF-8
필드 설명
account_found 필수사항. 계정이 있으면 true, 그렇지 않으면 false입니다.

get 인텐트에 대한 응답

intent=get를 사용한 요청은 기존 Google 계정의 액세스 토큰을 요청합니다.

  • HTTP 상태: 200 OK
  • Content-Type: application/json;charset=UTF-8

성공 응답 JSON 객체는 성공적인 표준 토큰 교환 응답 (access_token, refresh_token 등을 반환)과 정확히 동일한 구조를 사용합니다.

계정을 연결할 수 없는 경우 HTTP 401 오류가 반환됩니다.

  • HTTP 상태: 401 Unauthorized
  • Content-Type: application/json;charset=UTF-8
오류 필드 (JSON) 설명
error 필수사항. linking_error여야 합니다.
login_hint (선택사항) 대체 OAuth 연결 흐름에 전달할 사용자의 이메일 주소입니다.

create 인텐트에 대한 응답

intent=create가 포함된 요청은 JWT에 제공된 정보로 새 사용자 계정을 만들도록 요청합니다.

  • HTTP 상태: 200 OK
  • Content-Type: application/json;charset=UTF-8

성공 응답 JSON 객체는 성공적인 표준 토큰 교환 응답 (access_token, refresh_token 등을 반환)과 정확히 동일한 구조를 사용합니다.

사용자가 이미 있는 경우 사용자에게 기존 계정을 연결하라는 메시지를 표시하기 위해 HTTP 401 오류가 반환됩니다.

  • HTTP 상태: 401 Unauthorized
  • Content-Type: application/json;charset=UTF-8
오류 필드 (JSON) 설명
error 필수사항. linking_error여야 합니다.
login_hint 대체 OAuth 연결 흐름에 전달할 사용자의 이메일 주소입니다.

UserInfo 엔드포인트 (선택사항)

OpenID Connect Core 1.0 사양에 지정된 대로 연결된 사용자에 관한 기본 프로필 정보를 검색하는 데 사용됩니다. 이는 '간소화된 연결' 또는 '원탭 로그인'과 같은 기능에 필요합니다.

  • 메서드: GET
  • 인증: Authorization: Bearer ACCESS_TOKEN

응답 (JSON)

HTTPS 응답 본문에 JSON 객체가 포함된 성공 응답을 반환합니다.

  • HTTP 상태: 200 OK
  • Content-Type: application/json;charset=UTF-8

응답 필드

필드 설명
sub 필수사항. 시스템에서 사용자를 식별하는 고유 ID입니다.
email 필수사항. 사용자의 이메일 주소
email_verified 필수사항. 이메일 주소가 인증되었는지 여부를 나타내는 불리언입니다.
given_name (선택사항) 사용자의 이름입니다.
family_name (선택사항) 사용자의 성입니다.
name (선택사항) 사용자의 전체 이름입니다.
picture (선택사항) 사용자 프로필 사진의 URL입니다.

오류 응답

액세스 토큰이 유효하지 않거나 만료된 경우 HTTP 401 Unauthorized 오류를 반환합니다. WWW-Authenticate 응답 헤더도 포함해야 합니다.

연결 프로세스 중에 반환된 실패 응답 (4xx 또는 5xx)은 복구할 수 없는 것으로 간주됩니다. 이러한 경우 Google은 가져온 토큰을 삭제하며 사용자는 계정 연결 프로세스를 다시 시작해야 합니다.

토큰 취소 엔드포인트 (선택사항)

사용자가 Google 표시 경로에서 계정을 연결 해제할 때 Google이 서비스에 알리도록 허용합니다. 이 엔드포인트는 RFC 7009에 설명된 요구사항을 충족해야 합니다.

  • 메서드: POST
  • Content-Type: application/x-www-form-urlencoded

요청 매개변수

매개변수 설명
client_id 요청 출처를 Google로 식별하는 문자열입니다. 이 문자열은 시스템 내에서 Google의 고유 식별자로 등록되어야 합니다.
client_secret 서비스를 위해 Google에 등록한 비밀번호 문자열입니다.
token 취소할 토큰입니다.
token_type_hint (선택사항) 취소되는 토큰의 유형에 관한 힌트입니다(access_token 또는 refresh_token). 지정하지 않으면 기본값은 access_token입니다.

응답

토큰이 성공적으로 삭제되거나 토큰이 이미 유효하지 않은 경우 성공 응답을 반환합니다.

  • HTTP 상태: 200 OK
  • Content-Type: application/json;charset=UTF-8

오류 응답

어떤 이유로든 토큰을 삭제할 수 없는 경우 (예: 데이터베이스를 사용할 수 없음) HTTP 503 오류를 반환합니다. Google에서 나중에 또는 Retry-After 헤더에 따라 요청을 다시 시도합니다.

  • HTTP 상태: 503 Service Unavailable
  • Content-Type: application/json;charset=UTF-8
  • 헤더: Retry-After: <HTTP-date / delay-seconds>