인증

카카오써트에서 제공하는 SDK에는 "인증"이 내부적으로 구현되어 별도의 개발이 필요하지 않으므로, 본 가이드는 참고 목적으로만 이용하여 주시기 바랍니다.

카카오써트 API는 "토큰 기반 인증 시스템"을 이용하여 이용자를 식별하고 통신 위변조를 차단하여 상호 신뢰할 수 있는 통신환경을 보장하고 있습니다. 토큰 기반 인증을 완료한 프로그램 공급사만이 카카오써트 API 호출이 가능합니다.

1. 토큰 발급

프로그램 공급사는 API 통신전문 위변조 방지를 위하여 카카오써트에서 발급한 인증정보(LinkID, SecretKey)로 생성한 HMAC-SHA256 Signature를 HTTP Authorization Header에 입력하여 보안 토큰을 발급받습니다.

HTTP Authorization Header 입력 예시

Authorization: BAROCERT LinkID Signature

Signature 의사코드(pseudocode)

Content-MD5는 전문에 Contents가 없는 경우(GET request)에는 빈 문자("")로 처리합니다. Date는 UTC 시간으로 기재되어야 하며, Authorization Header 또는 x-lh-date Header 중 하나의 Header에 반드시 입력되어야 합니다.Canonicalized-LINKHUBHeaders는 HTTP Header에 카카오써트가 정의하는 Header를 추가로 입력하는 정보로 'x-lh-'로 시작하는 HTTP Header에 Canonicalization한 결과입니다.

Authorization = "LINKHUB" + " " + LinkID + " " + Signature;

Signature = Base64( HMAC-SHA256( SecretKey, UTF-8-Encoding-Of( StringToSign ) ) ); 

StringToSign = HTTP-Verb + "\n" +
Content-MD5 + "\n" + Date + "\n" +
CanonicalizedLINKHUBHeaders + ResourceURI [include query string];

CanonicalizedLINKHUBHeaders = >described below<
카카오써트 Canonicalization 프로세스
  1. 1. 모든 Header 이름을 소문자로 변환합니다. e.g. x-lh-Date -> x-lh-date
  2. 2. Header를 이름순으로 정렬합니다.
  3. 3. 동일한 Header 이름에 대해서는 공백 없는 콤마 구분자로 하나로 합하여 처리합니다.
  4. 4. Key와 value를 구별하는 콜론(;)의 앞/뒤 공백은 제거합니다.
  5. 5. Header의 key는 제외하고 value만 개행문자(\n)로 합하여 하나의 문자열로 처리합니다.

2. 토큰 이용

발급받은 토큰을 Authorization Header에 입력하여 카카오써트 API를 호출합니다.
카카오써트는 BearerTokenValue를 이용하여 별도의 약속된 암호 알고리즘으로 프로그램 공급사를 식별합니다.

HTTP Authorization Header 입력 예시

Authorization: Bearer BearerTokenValue

카카오써트는 수신한 API 토큰 값을 별도의 약속된 암호화 알고리즘으로 해석하여 프로그램 공급사를 식별하여 서비스를 제공합니다.

Signature 의사코드(pseudocode)

Authorization = Signature;

Signature = Base64( HMAC-SHA256( SecretKey, UTF-8-Encoding-Of( StringToSign ) ) ); 

StringToSign = HTTP-Verb + "\n" +
Uri + "\n" +
Date + "\n" +
Content-MD5 + "\n"

Content-MD5는 전문에 Contents가 없는 경우(GET request)에는 빈 문자("")로 처리합니다. Date는 UTC 시간으로 기재하여 x-bc-date Header에 Api 버전인 2.0을 x-bc-version Header에 반드시 입력해야 합니다.