Authentication

파트너 서버 (3rd Party Service Server)와 LG 상업용 세탁기 서버 간 상호 인증은 JWE Token을 사용하며, 이 토큰은 JSON Web Encryption (RFC7516RFC7519) 표준을 따릅니다. 암호화에는 다음 알고리즘이 사용됩니다. 

  • Claim 암호화: A256CBC-HS512
  • Random Key 암호화: RSA-OAEP-256

Basics

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

  1. 요청하는 서버는 매 요청마다 약속된 암호화 알고리즘에 따라 인증 데이터를 암호화한 JWE Token을 생성합니다.
  2. 요청하는 서버는 JWE Token을 HTTPS Authorization Bearer Header에 포함하여 요청받는 서버로 전달합니다.
  3. 요청받는 서버는 약속된 암호화 알고리즘에 따라 JWE Token에서 인증 데이터를 복호화합니다.
  4. 요청받는 서버는 인증 데이터가 유효한 경우에만, 해당 요청을 처리합니다.

Overall Flow

파트너 서버가 LG 상업용 세탁기 API를 호출하는 경우에 대해, 전반적인 인증 흐름을 그림으로 나타내면 다음과 같습니다.

  • 요청하는 서버: 파트너 서버 (3rd Party Service Server)
  • 요청받는 서버: LG 상업용 세탁기 서버

인증 흐름에 대한 간략한 아키텍처

01. JWE Token 생성 (암호화)

JWE Token은 JSON Web Encryption RFC7516 표준에 따라 생성되며, 이 토큰은 Claim(인증 정보)과 Random Key를 암호화하여 포함합니다.  

Claim

인증에 필요한 정보를 의미하며 다음과 같이 name:value 쌍으로 기술됩니다.   

{
  "iss" : "{{Third Party Service Server Domain Name}}", # token 발급자
  "sub" : "/device", # token 제목 (api url로 대체)
  "aud" : "{{Commercial Laundry Service Server Domain Name}}",# token 대상자
  "exp" : 1480849147370, # token expiration time
  "iat" : 1480849147200 # token 생성 시간
}

암호화 알고리즘 

Claim 암호화

Claim 암호화에는 대칭키 방식인  A256CBC-HS512가 사용됩니다. 요청하는 서버는 매 API 호출마다 먼저 Random Key를 생성하고, 이 Random Key를 대칭키로 사용하여 Claim(인증 정보)을 암호화합니다.  

Random Key 암호화 

Random Key는 Claim 암호화에 사용되는 대칭키입니다. 요청하는 서버는 비대칭키 방식인 RSA-OAEP-256 에 따라 Random Key를 암호화합니다. 이 암호화에 사용되는 Public Key는 요청받는 서버가 발급해줍니다.  

02. JWE Token 전달

요청하는 서버는 JWE Token을 HTTPS Authorization Bearer Header에 포함하여 요청받는 서버로 전달합니다. 예를 들어, 요청받는 서버가 LG 상업용 세탁기 서버인 경우 (즉, LG 상업용 세탁기 서버의 API를 호출하는 경우) 다음과 같이 전달합니다.

LG 상업용 세탁기 API - 공통 헤더 - Authorization

Content-Type: application/x-www-form-urlencoded
x-service-id: abab90a800033addb66821d4
x-service-key: abababababJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJzZXJ2aWNlSWQiOiI3YmRhOTBhODAwMDMzYWRkYjY2ODIxZDQiLCJ0b2tlblNlZWQiOiI1Zjc2MWQwMDU2YmE4NWJkIiwidGltZSI6MTYwNzMyMDA5Mn0.qj6wTknmFeiuYSFMd8nkXf7AvetBL0Qxqnv48CMPfrU
x-api-key: abababababababababbababbabbababababababxBp5
x-country-code: KR
x-service-phase: QA
x-thinq-client-type: SERVER

Authorization: eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2Q0JDLUhTNTEyIiwia2lkIjoiVEdYWExXcmQ0bG42bnhubEZ5OVFlVnZPMTlCTkd2dmNqSDlJU3VWVVpkUSIsInR5cCI6IkpXRSJ9.hfBRxEHwG0Xeutr51zXyxHWpqzvhu3xepLdsxM96mM9bQKkazuQgHQVOcRWLAS-A0aFXjyzOWW7GtWLT_oOJBiYUoVQ-i3xxKABAE5TijPjvnkM3kXB7J6knLw1Wh4xxFbl8AuIynNMMfrRZUFvPVLPFn2DRw4f6pE2-upg1tYBO77YNDDXPUQPP3yMEihS2e2VYI-cKiBpgQaK0YvHHn1jBPJy-5ND0O0KXj8rSCTC0LaJkUsmLCVZoelUrOHZtMzRqg-s5YtQ0Ju8JtzFuejfDoNdEll3d7ThfJ0KXHyyDOBeQWF-j6Y7NJ9_AOTjk9RpLX18T1tPO5KWcpb1Okw.F93UfH9k8ILKAMuGnt64ew.0SFDOmtZS6LaFcREXfjWqLOUYQ9F15Ey9xANrLTW6cWoo9noLkXHEcPQvgVX-yRAIaaPEODylhDBYy4d-0i1JRMiRrKxKxtzS4Fzn9DJPm73L1KY_24EdbQXkBDpeTML03_I3oKA8z5b9NAfVg653lunhJIK5leHCFkib4wgLUw.SSZIIg8mNJgK8-EG4meo9JqbXC7dQV3hE8zIcc52BZ8

03. JWE Token 복호화 

요청 받는 서버는 다음과 같이 순차적으로 복호화합니다.

  1. RSA-OAEP-256 알고리즘에 따라 Random Key를 복호화합니다. 이 때, 자신이 가지고 있는 Private Key를 사용합니다. 
  2. 복호화된 Random Key를 대칭키로 사용하여, A256CBC-HS512 알고리즘에 따라 Claim (인증 정보)를 복호화합니다. 

04. 요청 처리 

요청 받는 서버는 복호화된 Claim(인증 정보)이 유효한 경우에만 해당 요청을 처리합니다. 

파트너 서버가 요청할 때 

파트너 서버가 LG 상업용 세탁기 API를 호출하는 경우의 상세 인증 흐름은 다음과 같습니다. 

  • 요청하는 서버: 파트너 서버 (3rd Party Service Server)
  • 요청받는 서버: LG 상업용 세탁기 서버

파트너 서버가 LG 상업용 세탁기 API를 호출할 때 시퀀스 다이어그램

 

 

LG 상업용 세탁기 서버가 요청할 때

LG 서버에서 파트너 서버의 API를 호출하는 경우의 상세 인증 흐름은 다음과 같습니다. 

  • 요청하는 서버: LG 상업용 세탁기 서버
  • 요청받는 서버: 파트너 서버 (3rd Party Service Server)

LG 서버에서 파트너 서버의 API를 호출할 때 시퀀스 다이어그램