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>