사용자 인증과 토큰 발급
오픈뱅킹 API를 이용하기 위해서는 먼저 인증 과정을 거쳐야한다. 서비스 사용자의 정보에 접근하기 위해서는, (1~2)먼저 사용자가 본인임을 증명하는 과정을 거친 후, 해당 인증 정보를 서비스에 넘겨준다. (3~4) 그리고 해당 인증 정보로 서비스 사용자에게 정보 조회 동의를 받았다는 것을 증명하고 인증 토큰을 받아야한다. (5~6) 이후 이 토큰을 사용하여, 사용자 정보에 접근하는 각종 오픈뱅킹 API를 호출한다.
사용자 인증
사용자 인증과정은 다음과 같다.
1. 서비스 정보를 들고, 사용자를 오픈뱅킹 본인 인증 페이지로 보낸다.
2. 사용자가 본인인증이 끝나면, 인증 정보(인증 코드)를 포함한 정보를 들고 서비스로 돌아온다.
3. 서비스는 해당 인증 정보를 획득하고 이후 과정이 진행된다.
<form method="get" action="https://testapi.openbanking.or.kr/oauth/2.0/authorize" target="_blank">
<input type="hidden" name="response_type" value="code"/>
<input type="hidden" name="client_id" value="{개발자 페이지에서 받은 client_id}"/>
<input type="hidden" name="redirect_uri" value="{개발자 페이지에 등록한 redirect_uri}"/>
<input type="hidden" name="scope" value="login inquiry transfer"/>
<input type="hidden" name="state" value="b80BLsfigm9OokPTjy03elbJqRHOfGSY"/>
<input type="hidden" name="auth_type" value="0"/>
<input type="submit" value="requestAuth"/>
</form>
사용자에게 인증 요청을 하기 위해서는, Front에서 사용자 인증 API를 호출하면 된다. 위의 API를 호출하면, 오픈뱅킹 인증 페이지로 리다이렉트 되고, 인증이 끝나면 사용자는 인증정보를 들고 서비스 페이지로 돌아온다.
인증 정보는 위 사진처럼, 지정한 서비스 페이지(redirect_uri)에 쿼리 파라미터(code, scope, state)로 온다. 이 인증정보는 사용자에게 정보제공 동의를 받았다는 의미로서, 이후 오픈뱅킹 API를 호출하는데 사용된다.
토큰 발급
토큰 발급 과정은 다음과 같다.
1. 서비스 정보&사용자 인증 정보를 들고 토큰 발급을 요청한다.
2. 인증 서버로부터 오픈뱅킹 API 접근을위한 토큰을 발급 받는다.
3. 이후 해당 토큰을 사용하여 각종 API를 호출한다.
@FeignClient(name="feign", url="https://testapi.openbanking.or.kr")
public interface OpenBankingFeign {
@PostMapping(
path = "/oauth/2.0/token",
consumes = "application/x-www-form-urlencoded",
produces = "application/json")
public TokenResponseDto requestToken(
@RequestParam("code") String code,
@RequestParam("client_id") String client_id,
@RequestParam("client_secret") String client_secret,
@RequestParam("redirect_uri") String redirect_uri,
@RequestParam("grant_type") String grant_type);
}
각종 오픈뱅킹 API를 호출하기 위해서는 API 접근 토큰을 발급받아야한다. 특히 사용자의 정보에 접근하기 위한 API의 경우에는 위에서 얻은 인증정보를 사용하여 토큰을 발급받아야 한다. 위의 API는 Secret Key를 사용하여 요청해야 하기때문에, 소스코드가 그대로 보여지는 Front가 아닌 Server에서 호출해야한다.
{
"access_token": "eyJhbGcadasdasTxvJ8",
"token_type": "Bearer",
"expires_in": "7776000",
"refresh_token": "eyJhbGciOiJIhR6rQ",
"scope": "login inquiry transfer",
"user_seq_no": "1000000106"
}
정상적으로 API가 호출되었다면, 위와같이 토큰 정보가 반환된다. 이제 이 정보를 저장해 두었다가. 사용자가 서비스를 사용할 때, 위의 토큰을 사용하여 오픈뱅킹 API를 호출하면 된다.
실습 소스
Front (Vue.js): https://github.com/NanKisu/nankisu-study/tree/master/openbanking-front-master/openbanking-front-master
Server (Spring Boot): https://github.com/NanKisu/nankisu-study/tree/master/openbanking-server-master/openbanking-server-master
'STUDY > 오픈뱅킹 API' 카테고리의 다른 글
[오픈뱅킹 API] 0. 오픈뱅킹 API란 (0) | 2021.03.23 |
---|