본문 바로가기
programming/OpenApiDEV

업비트 api 0002 파라미터 전달하여 인증토큰 요청하고 받기

by 개코 - 개발과 코딩 2021. 6. 23.

업비트 api 를 사용할 때 인증토큰을 받아야 한다. 그렇지 않으면 api 서비스를 받을 수 없다. 인증토큰을 받기 위해 파라미터를 전달한느 경우들도 발생할 수 있는데 이것 또한 어렵지 않다. 그저 get 방식으로 url 을 만들어 전송하면 그만이다.

인증토큰 받기

 

파라미터 존재할 때 인증 토큰 받기

인증토큰을 받기 위해 secret key 와 access key가 필요하다.

업비트 api는 보안토큰을 받기 위해 파라미터가 필요할 때와 필요하지 않을 때의 가이드를 제시하고 있다.

파라미터가 필요없는 경우는 이전 포스팅에 작성했다.

 

▶ 업비트 api 0001 파라미터 없는 경우 인증토큰 요청하고 받기

 

파라미터가 필요한 겨우도 똑같다.

가이드의 문서를 보고 그대로 따라하면 그 뿐이다.

 

가이드 문서의 샘플코드

여러가지 언어로 만들 수 있지만 자바를 기준으로 작성해 본다.

qurery string 에 필요한 url 문자열을 만들면 되며, 코드는 그대로 사용하면 된다.

query로써 전달할 url 파라미터 들은 get delete 등이나 post put 등 전송방식이나 파라미터의 상관없이 무조건 &키=값 의 형태를 가져야 한다.

물론 아래의 경우 파라미터가 없더라도 테스트로 전달해도 정상적으로 동작한다.

import com.auth0.jwt.JWT;
import com.auth0.jwt.algorithms.Algorithm;

import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.UUID;

public class OpenApiSample {

    public static void main(String[] args) throws NoSuchAlgorithmException, UnsupportedEncodingException {
        String accessKey = "발급받은 Access key";
        String secretKey = "발급받은 Secret key";

        String queryString = "query string 생성";

        MessageDigest md = MessageDigest.getInstance("SHA-512");
        md.update(queryString.getBytes("utf8"));

        String queryHash = String.format("%0128x", new BigInteger(1, md.digest()));

        Algorithm algorithm = Algorithm.HMAC256(secretKey);
        String jwtToken = JWT.create()
                             .withClaim("access_key", accessKey)
                             .withClaim("nonce", UUID.randomUUID().toString())
                             .withClaim("query_hash", queryHash)
                             .withClaim("query_hash_alg", "SHA512")
                             .sign(algorithm);

        String authenticationToken = "Bearer " + jwtToken;
    }

}

 

자바 스프링으로 변경해 본다.

마찬가지로 자바 스프링의 컨트롤러에 그대로 붙여넣기 하고 access key와 secret key만 넣어주면 된다.

예외처리를 위한 throws 가 존재하는 것에 주의하자.

위의 코드와 비교를 함에 있어 특별히 달라진 것은 없다.

단지 자바의 main 메서드에 있던 소스가 자바 스프링의 컨트롤러에 그대로 이식된 것 뿐이다.

@RequestMapping(value = "/trwm", method = RequestMethod.GET)
public void TestRequestWithMarket(Locale locale, Model model) throws NoSuchAlgorithmException, UnsupportedEncodingException {
	logger.info("Request Controller : TestRequestWithMarket.", locale);
	
	String accessKey = "발급받은 Access key";
	String secretKey = "발급받은 Secret key";
	
	String serverUrl = "https://api.upbit.com";

	String queryString = "query string 생성";

	MessageDigest md = MessageDigest.getInstance("SHA-512");
	md.update(queryString.getBytes("utf8"));

	String queryHash = String.format("%0128x", new BigInteger(1, md.digest()));

	Algorithm algorithm = Algorithm.HMAC256(secretKey);
	String jwtToken = JWT.create()
						 .withClaim("access_key", accessKey)
						 .withClaim("nonce", UUID.randomUUID().toString())
						 .withClaim("query_hash", queryHash)
						 .withClaim("query_hash_alg", "SHA512")
						 .sign(algorithm);

	String authenticationToken = "Bearer " + jwtToken;
	
	logger.info("authenticationToken" + authenticationToken);
	
	try {
		HttpClient client = HttpClientBuilder.create().build();
		HttpGet request = new HttpGet(serverUrl + "/v1/market/all?isDetails=false");
		request.setHeader("Content-Type", "application/json");
		request.addHeader("Authorization", authenticationToken);

		HttpResponse response = client.execute(request);
		HttpEntity entity = response.getEntity();

		System.out.println(EntityUtils.toString(entity, "UTF-8"));
	} catch (IOException e) {
		e.printStackTrace();
	}
}

 

결과를 보자

에러가 발생해야 정상이겠지만 정상적으로 동작하는 것을 알 수 있다.

물론, 가상화폐에 대한 컨텐츠를 개발하는 입장에서 가이드 문서의 초기 코드에서 이런 친철한 경우는 거의 드물기도 하다.

정상적으로 인증토큰을 받는 것을 확인 할 수 있다.

업비트 api 파라미터가 존재하는 경우 인증토큰 받기 결과

반응형

댓글