공통 정보

인증 방식

토스인증은 OAuth 2.0기반 accessToken (Client Credentials Grant Type)인증방식을 사용합니다. 산업프로토콜로서 RFC6749에 정의된 방식입니다.

전자서명 규격

토스인증은 사용자가 토스 앱을 통해 진행한 전자서명(Signature) 값을 PKCS#7 규격의 공개키 암호화 표준 방식에 따라 제공합니다.

요청 프로토콜 설정

토스인증 API의 EndPoint에 대한 모든 요청은 HTTPS 프로토콜을 따라야 합니다. TLS(Transport Layer Security, 전송 계층 보안) 1.2 미만의 SSL/TLS 버전은 보안이 취약하기 때문에 TLS 버전 1.2 이상만 지원합니다.

세션 키 RSA 암호화 알고리즘

인증의 요청과 응답을 AES 암복호화 할 때 사용되는 세션 키로 RSA/ECB/OAEPWithSHA-1AndMGF1Padding 알고리즘을 사용합니다.

호스트 정보

토스인증 서비스에 따라 호스트 정보가 구분되어 있습니다. 연동 용도에 맞게 활용해주세요.

본인확인, 간편인증, 전자서명 도메인

// AccessToken 발급
https://oauth2.cert.toss.im
// 인증요청, 상태조회, 결과조회
https://cert.toss.im

마이데이터 통합인증 도메인

https://mydata.cert.toss.im

방화벽 설정

요청 서버의 아웃바운드에 아래 토스인증의 IP를 허용해주세요. 포트는 모두 443입니다. 반대로 토스 인바운드는 제한없이 오픈 되어 있어서 바로 통신 테스트가 가능해요. VPN 또는 전용선 통신이 필요한 경우 사전에 토스로 문의주세요.

본인확인, 간편인증, 전자서명 방화벽

  • 117.52.3.222
  • 117.52.3.235
  • 211.115.96.222
  • 211.115.96.235

마이데이터 통합인증 방화벽

  • 117.52.3.221
  • 211.115.96.221

개인정보 암복호화

토스인증 API에는 인증 요청 과정에서 고객의 개인정보를 포함하는 경우가 있습니다. 개인정보 보호를 위해 고객사 서버와 토스 서버는 암호화된 데이터를 주고 받고 고객사에서는 복호화 후 평문 데이터를 확인할 수 있습니다.

  • 인증 요청에서 고객의 이름, 생년월일, 휴대폰번호를 전달할 때 암호화
  • 전자서명 서비스 원문에 고객의 개인정보가 포함되는 경우 원문 암호화
  • 인증 결과로 토스 서버에서 CI・DI 등을 포함한 개인정보를 제공하는 경우 암호화

표준창 호출 방식에서는 고객사 서버에서 토스인증 서버로 고객의 정보를 전달하지 않기 때문에 암호화 과정이 불필요합니다.

다만, 사용자 인증이 완료된 이후 결과조회 API를 호출할 때는 세션키를 포함해서 요청해야 합니다.

세션 키 생성 및 암호화 SDK 사용 예제(GCM)

SDK 코드 샘플을 참고하세요
https://github.com/toss/toss-cert-java-sdk

Java
package im.toss.cert.sdk;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
class TossCertSessionTest {
@Test
public void test() {
// 1. 세션 생성기를 사전에 1회만 생성해 주세요.
TossCertSessionGenerator tossCertSessionGenerator = new TossCertSessionGenerator();
// 2. 개인정보가 포함되어 있는 인증요청 API 호출 전에 세션을 생성해 주세요.
TossCertSession tossCertSession = tossCertSessionGenerator.generate();
// 3. 개인정보를 암호화 해주세요.
String userName = "김토스";
String encryptedUserName = tossCertSession.encrypt(userName);
System.out.println("encryptedUserName: " + encryptedUserName);
// 4. 인증요청 API를 호출해 주세요.
// 인증요청 API의 바디 파라미터에 생성된 sessionKey를 추가해 주세요.
String sessionKey = tossCertSession.getSessionKey();
String userName = encryptedUserName;
// 5. 사용자의 인증이 끝나면 결과조회 API 호출 전에 새로운 세션을 생성해 주세요.
TossCertSession tossCertSession = tossCertSessionGenerator.generate();
// 6. 결과조회 API를 호출해주세요.
// 결과조회 API의 바디 파라미터에 생성된 sessionKey를 추가해 주세요.
String sessionKey = tossCertSession.getSessionKey();
String txId = "a39c84d9-458d-47e4-acf7-c481e851f79b";
// 7. 복호화를 위해 결과조회 요청에서 생성했던 tossCertSession를 가지고 있어야 합니다.
// response.userName 을 응답받은 암호화된 userName 이라고 가정합니다.
// decryptedUserName 은 무결성 검증까지 완료되어 있습니다.
String decryptedUserName = tossCertSession.decrypt(response.userName);
}
}
토스 테스트 환경에서는 실제 사용자의 개인정보가 아닌 토스가 생성한 가상 인물의 고정된 개인정보를 제공합니다.
가상의 개인정보 확인하기

제공되는 언어를 살펴보세요

기본적으로 SDK 사용을 권장하지만, 다양한 언어의 코드 샘플도 함께 제공해요
https://github.com/toss/toss-cert-examples
  • 더 궁금한 내용이 있나요?