Overview

여러분의 서비스 사용자와 ThinQ 디바이스 사용자는 어떻게 통합될 수 있을까요? 여러분의 서비스는 어떻게 사용자로부터 권한을 위임받아 ThinQ Platform에 사용자 디바이스와 관련된 작업을 요청할 수 있을까요? LG EMP는 이를 위해 OAuth 2.0 표준을 따르는 API를 제공합니다. 

What is LG EMP?

LG Electronics Enterprise Membership Platform (이하 EMP)는 LG전자와 관련된 서비스를 제공하기 위한 회원 관리 플랫폼입니다. EMP는 LG 계정 혹은 LG 계정과 연동하는 3rd party 계정으로 로그인하여, LG전자 혹은 LG전자 파트너가 제공하는 서비스를 이용할 수 있도록 해줍니다.  

Key Features

EMP는 OAuth 2.0 프로토콜 중 Authorization Code Grant Type에 기반한 인증 프레임워크를 제공합니다. 여러분의 서비스는 EMP가 제공하는 API를 호출하여 다음을 요청할 수 있습니다.  

  • LG 계정 연동 로그인 (EMP 웹로그인)
  • 액세스 토큰, 리프레쉬 토큰 발급
  • 액세스 토큰 갱신 발급

Authorization Code Grant Type

EMP는 OAuth 2.0의 다양한 권한 부여 방식 중, Authorization Code Grant Type을 사용합니다. 이 방식은 여러분의 서비스와 같이 웹 서버에서 돌아가는 애플리케이션에 주로 사용되는 방식으로, 웹 브라우저(user-agent)와의 인터랙션이 포함됩니다. 서비스가 EMP에 로그인 프로세스를 요청하면 EMP는 사용자의 웹 브라우저를 로그인 페이지로 이동시켜 로그인을 진행하고, 로그인이 완료되면 사용자의 웹 브라우저를 약속된 Redirect URI로 이동시켜줍니다. 이때, EMP는 Redirect URI에 인증 코드 (Authorization Code)를 포함하여 리다이렉션합니다. 

서비스는 이 인증 코드로 EMP에 액세스 토큰을 요청하여 발급받고, 액세스 토큰을 제시하여 사용자의 자원에 접근할 수 있습니다. 

Benefits

ThinQ 서비스 사용자와 제공자에게 EMP는 다음과 같은 편의를 제공합니다.

  • 서비스 사용자
    • 디바이스를 ThinQ 앱에서 한 번만 등록하면, LG전자 혹은 LG전자 파트너가 제공하는 다양한 서비스를 이용할 수 있습니다. 
  • 서비스 제공자
    • EMP와 ThinQ Platform에 연동하여, 전 세계 수많은 ThinQ 디바이스 사용자에게 서비스를 제공할 수 있습니다.

emp_benefit

 

Basic Concept

여러분이 에어컨을 제어하는 서비스를 제공한다고 가정해 봅시다. ThinQ 에어컨 사용자가 여러분의 서비스를 이용하기까지 어떤 과정이 필요할까요?

EMP_overall-diagram 

A. 에어컨을 ThinQ Platform에 등록 (User/ LG ThinQ 앱)

  1. 사용자가 LG전자가 제공하는 ThinQ 앱에서 LG 계정 연동 계정으로 가입하고 로그인합니다. 
  2. 사용자가 에어컨을 등록합니다.

→ 사용자의 에어컨이 ThinQ Platform에 등록됩니다.

B. 서비스 로그인 및 액세스 토큰 발급 (User/ Service/ LG EMP)

  1. 사용자가 서비스에 로그인을 요청합니다.
  2. 서비스는 EMP에 로그인을 요청합니다. (→ EMP는 사용자의 웹브라우저를 EMP가 제공하는 로그인 페이지로 이동시키고 사용자와 인터랙션 하여 로그인을 진행합니다.)
  3. 사용자가 로그인합니다. (→ EMP는 사용자의 웹브라우저를 서비스로 돌려주고 인증 코드를 발급합니다.)
  4. 서비스는 EMP에 인증 코드를 전달하고 액세스 토큰을 요청합니다.
  5. EMP는 서비스에 액세스 토큰을 발급합니다.

→ 서비스는 EMP로부터 액세스 토큰을 발급받습니다.

C. 에어컨 제어 (User/ Service/ LG ThinQ Platform)

  1. 사용자가 서비스에서 에어컨 제어를 요청합니다.
  2. 서비스는 ThinQ Platform에 에어컨 제어를 요청합니다. 요청 시, EMP가 발급해준 액세스 토큰을 전달해야 합니다.
  3. ThinQ Platform은 EMP와 통신하여 다음을 검사합니다.
    • 어떤 사용자에 대한 요청인가?
    • 유효한 액세스 토큰인가? (해당 사용자로부터 권한을 부여받았으며 만료되지 않은 토큰인가?)
  4. 액세스 토큰이 유효하다면, ThinQ Platform은 에어컨을 제어하고 서비스에 결과를 응답합니다.
  5. 서비스는 사용자에게 결과를 피드백합니다.

→ 서비스는 액세스 토큰으로 ThinQ Platform에 사용자의 에어컨 제어를 요청합니다.

Interaction Between Service, EMP, and ThinQ Platform

위 과정을 서비스 입장에서 간략히 설명하면 다음과 같습니다.

  1. 서비스는 EMP에 다음을 요청합니다. 
    • 사용자가 로그인할 수 있도록 로그인 프로세스를 요청합니다.
    • 사용자가 로그인하면 EMP로부터 액세스 토큰을 발급받습니다.
  2. 서비스는 ThinQ Platform에 사용자의 디바이스와 관련된 작업을 요청합니다. 요청 시, EMP가 발급한 액세스 토큰을 반드시 전달해야 합니다. 
    • 예) ThinQ Connect API를 통해 ThinQ Platform에 요청할 수 있는 작업
      • 사용자가 등록한 디바이스 리스트를 조회
      • 해당 에어컨의 현재 상태를 조회 (예: 목표 온도 조회)
      • 해당 에어컨에 제어 명령을 전달 (예: 에어컨 온도 1도 올리기)
      • 해당 에어컨의 푸쉬 알림을 구독 (예: 필터 교체 알림) 

 

Basic Workflow 

서비스와 EMP 간의 인터랙션은 OAuth 2.0 프로토콜을 따릅니다. 

OAuth 2.0 Protocol

OAuth 2.0 Basic

OAuth 2.0 프로토콜을 구성하기 위해서는 기본적으로 다음 4가지 역할이 필요합니다. 

  • 리소스 소유자 (사용자)
    • 리소스 서버 안에 보호된 자신의 자원을 이용할 수 있도록 권한을 부여하는 주체입니다. 
    • 애플리케이션 사용자를 의미합니다. 
  • 애플리케이션 
    • 인증 서버에 인증을 요청하여 액세스 토큰을 발급받고, 리소스 서버에 액세스 토큰을 제시하여 리소스 소유자의 자원을 요청합니다.
    • 포괄적인 의미의 응용 프로그램을 일컬으며 여러분의 서비스가 이에 해당됩니다.
  • 인증 서버 (Authorization Server)
    • 애플리케이션이 리소스 소유자로부터 권한을 부여받았음을 인증하고, 애플리케이션에게 액세스 토큰을 발급해주는 서버입니다. 
  • 리소스 서버 (Resource Server)
    • 애플리케이션에게 사용자의 자원을 제공하는 서버입니다. 
    • 애플리케이션이 유효한 액세스 토큰으로 요청한 경우에만, 요청을 수락하고 사용자의 자원을 제공합니다.

이들이 상호 작용하는 기본 흐름은 다음과 같습니다.

  1. Request Authorization 
    • 애플리케이션이 리소스 소유자(사용자)에게 권한을 요청합니다. 
  2. Grant Authorization
    • 사용자가 권한을 승인하면, 애플리케이션은 권한을 부여받습니다.
  3. Request Access token with Authorization Grant
    • 애플리케이션은 부여된  권한으로 인증 서버에 액세스 토큰을 요청합니다.
  4. Issue Access Token
    • 인증 서버는 애플리케이션에 액세스 토큰을 발급합니다.
  5. Request Protected Resource with  Access Token
    • 애플리케이션은 액세스 토큰을 제시하여 리소스 서버에 해당 사용자의 자원을 요청합니다.
  6. Serve Protected Resource
    • 액세스 토큰이 유효하다면, 리소스 서버는 애플리케이션에 사용자의 자원을 제공합니다.

EMP Basic Workflow

OAuth 2.0을 여러분의 상황에 맞게 대입해볼까요? 여러분의 서비스는 무엇에 해당할까요? EMP는 어떤 역할을 담당하고 ThinQ Platform은 어떤 역할을 담당할까요? 

emp_basic-workflow

OAuth 2.0

Service/ EMP/ ThinQ Platform

Description

애플리케이션

Service (Partner Server)

  • 여러분의 서비스가 이에 해당합니다.

리소스 소유자 (사용자)

User

  • ThinQ 디바이스의 소유자이자 서비스 사용자입니다.
  • ThinQ 앱을 통해 디바이스를 등록하고, 서비스가 이 디바이스 정보를 이용할 수 있도록 권한을 부여합니다. 

인증 서버 (Authorization Server)

EMP (LG Server)

  • 서비스가 사용자로부터 권한을 부여받았음을 인증하고, 액세스 토큰을 발급해주는 서버입니다.

리소스 서버 (Resource Server)

ThinQ Platform (LG Server)

  • 사용자의 자원(ThinQ 디바이스 데이터 등)을 서비스에 제공해주는 서버입니다.
  • 서비스가 유효한 액세스 토큰으로 요청한 경우에만 요청한 작업을 수행합니다. 

ThinQ Platform

AI/ IoT/ 클라우드 등 LG ThinQ 디바이스와 관련된 다양한 기술을 아우르는 플랫폼이며, 여러 개의 복합적인 서버로 구성되어 있습니다. ThinQ Platform은 ThinQ 디바이스와 연동하는 파트너 서비스를 위해 여러 가지 API (Application Programming Interface)를 제공합니다. 예를 들어, 파트너 서비스는 ThinQ Connect API를 이용하여 다음과 같은 작업을 요청할 수 있습니다.  

  • 사용자의 디바이스 리스트 조회
  • 디바이스 상태 조회
  • 디바이스 제어
  • 디바이스 푸쉬 알림 구독 및 해지 등

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

1. Request Authorization

여러분의 서비스가 사용자에게 ThinQ Platform에 등록된 사용자의 디바이스를 이용할 수 있는 권한을 요청합니다. 

  • 서비스가 EMP에 로그인 프로세스를 요청하면,
  • EMP는 사용자의 웹 브라우저(user-agent)를 EMP가 제공하는 로그인 URI로 이동시키고, 사용자에게 로그인을 제공합니다. 

2. Grant Authorization

사용자가 승인하면, 여러분의 서비스는 EMP로부터 권한을 부여받습니다.

  • 사용자가 로그인하면,
  • EMP는 사용자의 웹 브라우저를 서비스가 사전에 제공한 Redirect URI로 돌려주고,
  • 서비스에 인증 코드(Authorization Code)를 발급합니다.

3. Request Access token with Authorization Grant.

여러분의 서비스는 EMP가 발급한 인증 코드(Authorization Code)를 이용하여, EMP에 액세스 토큰을 요청합니다.

  • 서비스는 EMP가 돌려준 Redirect URI에 포함된 인증 코드(Authorization Code)를 추출하고
  • 이 코드를 EMP에 전달하여 액세스 토큰을 요청합니다.

4. Issue Access Token

EMP는 여러분의 서비스에 액세스 토큰을 발급합니다.

  • EMP는 인증 코드를 검증하고,
  • 서비스에 액세스 토큰을 발급합니다. 

5. Request Protected Resource with  Access Token.

여러분의 서비스는 액세스 토큰을 제시하여 ThinQ Platform에 해당 사용자의 디바이스와 연동한 작업(예: 에어컨 온도 1도 올려줘)을 요청합니다.

  • 서비스는 ThinQ Platform의 API를 호출할 때 액세스 토큰을 파라미터로 전달해야 합니다.

6. Serve Protected Resource

액세스 토큰이 유효하다면, ThinQ Platform은 해당 에어컨과 연동하여 명령을 수행한 뒤 여러분의 서비스에 결과를 응답합니다.

  • ThinQ Platform은 EMP와 통신하여 액세스 토큰이 유효한지 검증하고,
  • 유효한 경우에만 요청을 수행한 후 결과를 응답합니다. 

 

How to Develop with EMP?

Development Process

여러분의 서비스(앱)와 EMP를 연동하여 개발하는 절차는 다음과 같습니다.

1. EMP 연동 방식 협의

먼저, 여러분의 서비스(앱)가 어떤 방식으로 EMP와 연동해야 하는지를 LG 담당자에게 공유해 주십시오. 그리고 여러분의 상황에 맞는 정보를 제공받으십시오. 

2. EMP App Key 발급 

LG 담당자에게 여러분의 서비스(앱)에 대한 App Key 발급을 요청하고, 필요한 정보를 전달받으십시오.

App Key

EMP에서 서비스(앱)를 식별하고 인증하기 위해서 사용하는 식별자(identifier)로, client_id라고도 부릅니다.

3. EMP 연동 개발

본 개발자 사이트의 문서와 LG 담당자가 제공하는 정보를 참조하여, 여러분의 서비스(앱)와 EMP가 연동하도록 구현하십시오.

EMP 로그인 방식은 크게 다음과 같이 나누어 볼 수 있습니다.

  • LG 계정으로 로그인하는 경우
  • 3rd party 계정으로 로그인하는 경우
    • EMP 웹 로그인을 사용하는 경우
    • 3rd party가 제공하는 App SDK를 사용하는 경우
LG 계정으로 로그인하는 경우
  1. 서비스(앱)는 EMP API를 호출하여 EMP Sign-in 페이지로 진입합니다.
  2. 사용자는 LG계정의 ID/PW를 입력하여 로그인합니다.
  3. EMP는 로그인된 사용자의 authorize code 값을 리턴합니다.
  4. 서비스(앱)는 authorize code 값으로 access token을 발급받아 사용합니다.
3rd Party 계정으로 로그인하는 경우
1) EMP 로그인 웹 로그인을 사용하는 경우

이 방식은 EMP Front를 통해 3rd party 계정의 인증과 EMP로그인 과정을 모두 처리합니다.

지원 계정

다음 3rd party 계정만 사용 가능합니다.

  • Google Account
    • 단, 구글이 권장하는 Chrome Custom tab 혹은 SFSafariViewController를 사용해야 하며, WebView는 사용할 수 없습니다.
  • Facebook Account
  • Amazon Account 
  • Naver Account (국내 한정) 
  1. 서비스(앱)는 EMP API를 호출하여 EMP Sign-in 페이지로 진입합니다.
  2. 사용자는 로그인할 3rd party 계정 유형을 선택합니다.
  3. EMP는 사용자가 선택한 계정에 대한 인증 페이지를 요청합니다.
  4. 사용자는 해당 3rd party 계정의 ID/PW를 입력하여 로그인합니다.
  5. EMP는 인증이 완료되면 authorize code를 리턴합니다. 
  6. 서비스(앱)는 authorize code 값으로 access token을 발급받아 사용합니다.
2) 3rd party가 제공하는 App SDK를 사용하는 경우

이 방식은 3rd party App SDK를 통해, 사용자가 3rd party 계정으로 로그인하도록 하는 방식입니다.

LG전자는 3rd party 의존적인 변경 사항(예: 계정 정책 변경, API 버전 변경, 단말 OS 업데이트 등)으로 인한 문제에 대해서는 책임지지 않으며, 이에 대한 수정 및 검증은 각 서비스(앱)에서 수행해야 합니다.

지원 계정

다음 3rd party 계정만 사용 가능합니다.

  • Google Account  
  • Facebook Account
    • 단, Facebook 개발자 사이트에서 서비스(앱) 등록 후, 반드시 EMP에 business 그룹 요청을 해야 합니다.
  • Naver Account (국내 B2C 서비스(앱) 한정)
    • 단, 네이버는 공식적으로 business grouping을 지원하지 않으므로, 네이버에 요청하여 허용된 경우에 한해서만 제한적으로 지원합니다.  

다음을 참조하여 개발을 진행하십시오. 

  1. 귀사의 LG 담당자에게 사용하고자 하는 3rd party SDK 정보를 공유해주십시오.
  2. 3rd party 인증 과정은 각 3rd Party 회사가 제공하는 SDK 및 문서를 참조하여 구현하십시오.
  3. EMP 연동 과정은 다음을 참고하거나 귀사의 LG 담당자를 통해 안내 받으십시오.

예) Google – App SDK를 사용하는 경우

  1. 서비스(앱)은 EMP API ({EMPBaseURL}/authorize)를 호출하여 EMP Front UI에 진입합니다.
  2. EMP Front UI (empsign_in)에서 사용자가 Google 로그인 버튼을 클릭하면, 서비스(앱)의 callback_url로 다음 값이 리턴됩니다.
    • returnCode = 910 
    • returnDescription = confirm_ggl 
  3. 서비스(앱)은 해당 리턴을 받으면 WebView를 종료하고 Google App SDK를 사용하여 구글 인증을 수행합니다.
  4. Google 인증이 완료되면 서비스(앱)은 EMP Front UI (empsign_in) 페이지를 재호출합니다. 이 때, 헤더에 다음 정보를 포함하여 호출합니다.
    • user_id_type = GGL
    • user_id = 해당 사용자의 Google ID 
    • user_thirdparty_token = 구글로부터 발급받은 토큰 값
  5. 인증이 유효하면, EMP는 authorize code를 발급합니다.
  6. 서비스(앱)는 authorize code로 access token을 발급받아 사용합니다.