REST API 적용하기

가입 콜백 (어플리케이션 구현)

로그인을 사용하기 위해서는 개발자센터의 로그인API 설정에 등록된 Callback URL에 대해 아래와 같이 구현되어야 합니다.

회원 암복호키 교환 콜백

인증정보 및 회원정보는 어플리케이션에서 제공하는 암복호키로 안전하게 암호화되어 제공됩니다.
이를 위해 회원가입 시 어플리케이션에서 등록한 Callback URL으로 키교환 연동을 수행하여 어플리케이션의 회원 별 암복호키를 제공받습니다.

회원 암호화 키교환 콜백의 HTTP 요청/응답 규격은 아래와 같습니다.

1. HTTP Request

POST /어플리케이션-Callback-URL HTTP/1.1
Host: 어플리케이션-서버-도메인
Content-type: application/json;charset=utf-8

2. Parameter

파라미터명 타입 설명 필수여부
client_id String 어플리케이션 Client ID O
used_type String 사용타입 “1” 회원 암복호키 교환 O
ptn_cd String 어플리케이션 회원 코드 O
public_key String 암호화 공개키 (회원의 암복호화 키를 암호화하기 위한 키 ) O

3. Response

항목 타입 설명
code String 성공인 경우 “0000”
message String
result Object 응답결과정보
enc_partner_key String 어플리케이션 회원 암복호키 (32자리 랜덤코드)
  • Sample Request/Response JSON

- HTTP Request Body

{   
  client_id: "어플리케이션 Client ID",
  used_type: "1",
  ptn_cd: "어플리케이션 회원 코드",
  public_key: "public key (RSA)",
}

- HTTP Response Body

{
  code: "0000",
  message: "", 
  result: {
    enc_partner_key: "어플리케이션 회원 암복호키"
  }
}

암복호키 생성 예시

위 어플리케이션 회원 암복호키는 ifree에서 제공하는 public_key를 사용하여 RSA 암호화하여 반환되어야 하며, 회원 암복호키는 32자리의 문자열로 생성되어야 합니다.

아래는 RSA 암호화를 위해 SDK에서 제공되는 사용 예시입니다.

// 회원 별 암복호키 생성 (32자리 랜덤코드)
String user_encrypt_key = CryptUtil.generateCryptKey();

// 회원 별 암복호키 RSA 암호화 
String enc_partner_key = CryptUtil.encryptCryptKey(public_key, user_encrypt_key);

아래는 RSA 암호화를 위한 Java 예시입니다.
// RSA 암호화 
KeyFactory factory = KeyFactory.getInstance("RSA");
byte[] publicKeyBytes = Base64.getDecoder().decode(publicKey);
X509EncodedKeySpec x509Spec = new X509EncodedKeySpec(publicKeyBytes);
PublicKey pk = factory.generatePublic(x509Spec);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, pk);
byte[] encryptBytes = cipher.doFinal(plainText.getBytes());
String enc_partner_key = Base64.getEncoder().encodeToString(encryptBytes);

회원 가입 완료 콜백

어플리케이션 회원 등록이 완료되면 회원 가입 정보를 어플리케이션에서 등록한 Callback URL으로 회원 가입 완료 연동을 진행하여 어플리케이션 별 회원 가입을 완료합니다.

HTTP 연동을 위한 요청/응답 규격은 다음과 같습니다.

1. HTTP Request

POST /어플리케이션-Callback-URL HTTP/1.1
Host: 어플리케이션-서버-도메인
Content-type: application/json;charset=utf-8

2. Parameter

파라미터명 타입 설명 필수여부
client_id String 어플리케이션 Client ID O
used_type String 사용타입 “2” 회원 가입 완료 O
ptn_cd String 어플리케이션 회원 코드 O
partner_sp String 어플리케이션 회원 Super Passcode (암호화) O
ubifill String 어플리케이션 회원 정보 (암호화) X

3. Response

항목 타입 설명
code String 성공인 경우 “0000”
message String
  • Sample Request/Response JSON

- HTTP Request Body

{
  client_id: "어플리케이션 Client ID",
  used_type: "1",
  ptn_cd: "어플리케이션 회원 코드",
  partner_sp: "어플리케이션 회원 Super Passcode (암호화)",
  ubifill: "어플리케이션 회원 정보 (암호화)"
}

- HTTP Response Body

{
  code: "0000",
  message: ""
}

회원 Super Passcode 및 회원정보 복호화 예시

partner_sp, ubifill 정보는 어플리케이션에서 제공한 회원 별 암복호키로 암호화되어있습니다.

아래는 위 정보 복호화를 위해 SDK에서 제공되는 사용 예시입니다.

// partner_sp 복호화
String decryptedPartnerSp = CryptUtil.decryptPartnerSp(user_encrypt_key, partner_sp);

// ubifill 복호화 
UserInfo userInfo = CryptUtil.decryptUbifill(user_encrypt_key, ubifill);
// userInfo.getEmail();
// userInfo.getUserName();
// userInfo.getPhoneNumber();

인증 (ifree 제공)

엑세스토큰 발급

로그인 인증을 위한 엑세스토큰을 발급 받기 위해서는 SDK를 통해 발급 받은 어플리케이션 인증 토큰 ptn_token이 필요합니다. ptn_token 발급에 대한 내용은 SDK(Android,iOS,JavaScript)를 참고하시기 바랍니다.
HTTP 연동을 위한 요청/응답 규격은 다음과 같습니다.

1. HTTP Request

POST /process/token HTTP/1.1
Host: partner-auth.ifree.world
Content-type: application/json;charset=utf-8

2. Parameter

파라미터명 타입 설명 필수여부
client_id String 어플리케이션 Client ID O
secret_key String 어플리케이션 Server Secret Key O
ptn_token String 어플리케이션 인증 토큰 O

3. Response

항목 타입 설명
code String 성공인 경우 “0000”
message String
result Object 응답결과정보
acs_token String 엑세스토큰
expire_dt String 엑세스토큰 만료일시 (yyyyMMddHH24miss 포맷)
ptn_cd String 어플리케이션 회원 코드
  • Sample Request/Response JSON

- HTTP Request Body

{   
  client_id: "어플리케이션 Client ID",
  secret_key: "어플리케이션 Server Secret Key",
  ptn_token: "어플리케이션 인증 토큰"
}

- HTTP Response Body

{
  code: "0000",
  message: "",
  result: {
    acs_token: "엑세스토큰",
    expire_dt: "엑세스토큰 만료일시 (yyyyMMddHH24miss 포맷)",
    ptn_cd: "어플리케이션 회원 코드"
  }
}

엑세스토큰 발급 예시

아래는 엑세스토큰 발급을 위해 SDK에서 제공되는 사용 예시입니다.

try {
  APIClient client = new APIClient();
  client.init(clientID, secretKey);
  APIResponse<AccessTokenRes> response = client.getAccessToken(ptn_token);
  if (!"0000".equals(response.getCode())) {
    // 오류메시지 확인 (response.getMessage())
  } else {
    AccessTokenRes result = response.getResult();
    // 엑세스토큰 확인 
    result.getAccessToken();
    // 어플리케이션 회원코드 확인 
    result.getUserCode();
   }
} catch (APIResponseException e) {
  // e.getHttpStatusCode() : http status code 
} catch (IOException e) {
  // Connection Error
}

회원 인증

엑세스토큰 발급을 통해 제공된 엑세스토큰으로 회원 인증을 수행합니다.
인증 요청에 대한 응답으로 제공되는 ptn_sp 정보가 회원가입 시 발급 받은 partner_sp과 동일한지 어플리케이션에서 추가 확인을 할 수 있습니다.

HTTP 연동을 위한 요청/응답 규격은 다음과 같습니다.

1. HTTP Request

POST /process/authenticate HTTP/1.1
Host: partner-auth.ifree.world
Content-type: application/json;charset=utf-8

2. Parameter

파라미터명 타입 설명 필수여부
client_id String 어플리케이션 Client ID O
secret_key String 어플리케이션 Server Secret Key O
acs_token String 어플리케이션 엑세스토큰 O

3. Response

항목 타입 설명
code String 성공인 경우 “0000”
message String
result Object 응답결과정보
ptn_sp String 어플리케이션 회원 Super Passcode (암호화)
  • Sample Request/Response JSON

- HTTP Request Body

{   
  client_id: "어플리케이션 Client ID",
  secret_key: "어플리케이션 Server Secret Key",
  acs_token: "어플리케이션 엑세스토큰"
}

- HTTP Response Body

{
  code: "0000",
  message: "",
  result: {
    ptn_sp: "어플리케이션 회원 Super Passcode (암호화)",
  }
}

회원 인증 예시

아래는 회원 인증을 위해 SDK에서 제공되는 사용 예시입니다.

try {
  APIClient client = new APIClient();
  client.init(clientID, secretKey);
  APIResponse<AuthRes> response = client.authenticate(acs_token);
 
  if (!"0000".equals(response.getCode())) {
    // 오류메시지 확인 (response.getMessage())
  } else {
    AuthRes result = response.getResult();
    // 어플리케이션 회원 Super passcode 확인 
    String decryptedPartnerSp = CryptUtil.decryptPartnerSp(user_encrypt_key, result.getPartnerSP());
    // decryptedPartnerSp 와 어플리케이션에 등록된 partner_sp 일치여부 확인 
  }
} catch (APIResponseException e) {
  // e.getHttpStatusCode() : http status code 
} catch (IOException e) {
  // Connection Error
}

SDK 의존성 설정

SDK 다운로드 페이지에서 Java 개발을 위한 라이브러리를 제공하고 있습니다.

해당 라이브러리를 다운로드 받은 뒤, maven 의존성을 아래와 같이 추가하여 사용하시기 바랍니다.

<dependencies>
 <dependency>
  <groupId>com.rowem.ifree</groupId>
  <artifactId>ifree-sdk-rest-client</artifactId>
  <scope>system</scope>
  <systemPath>path-to-library</systemPath>
 </dependency>
</dependencies>