ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [오픈뱅킹] OpenAPI로 토큰 발급
    개발 2022. 5. 11. 15:13

    https://not-robot.tistory.com/7

     

    [오픈뱅킹] OpenAPI로 사용자 인증

    오픈뱅킹 오픈API 연동 작업을 하게 되었다. https://developers.kftc.or.kr/dev 금융결제원 오픈API 개발자사이트 TESTBED FOR DEVELOPERS 오픈 API를 이용하여 창의적인 어플리케이션을 제작해 보세요. develope..

    not-robot.tistory.com

    지난 사용자 인증 api 에 이어서 토큰을 발급받아 보도록 하겠다.

    토큰 발급은 개인 사용자와 이용 기관 등 사용자에 따라 보내야할 데이터가 다르다.

    우선 개인 사용자의 경우를 먼저 테스트 해보겠다.

    개인 사용자 토큰 발급

    사용자 인증 api 로 받은 code 결과값을 넣어서 x-www-form-unlencoded 형식으로 담아주면 정상적으로 동작한다.

     

    다음은 이용 기관에서 토큰을 발급받는 방법이다.

    이용 기관 토큰 발급

    이용 기관은 code, redirect_uri 값을 입력하지 않고 grant_type을 "client_credentials"로, scope을 "oob"로 고정 후 보내면 access_token과 client_use_code 값을 받을 수 있다.

     

    이번에도 마찬가지로 Lambda 와 axios를 사용해서 개발해보았다.

     

    1. 개인 사용자 token 발급

    - 지난번 소스에 이어서 code값이 들어오지 않을 경우에는 사용자 인증을, code값이 들어왔을 경우에 토큰 발급을 해보았다.

    const axios = require('axios');
    const qs = require('qs');
    
    const makeResult = (data, headers = {}, code = 200) => ({ statusCode: code, body: data, headers, });
    
    exports.handler = async (event) => {
        try {
            const code = event.queryStringParameters?.code;
            if (!code) return await getCode();
            const tokenRes = await getToken();
            if (!tokenRes.access_token) return makeResult(JSON.stringify(tokenRes));
            const { access_token, } = tokenRes;
            return makeResult(access_token);
        } catch (e) {
            console.log(e);
        }
    };
    
    const getToken = async (code) => {
        const uri = `${process.env.BASE_URL}/oauth/2.0/token`;
        const res = await axios.post(uri, qs.stringify({
        	code,
            client_id: process.env.CLIENT_ID,
            client_secret: process.env.CLIENT_SECRET,
            redirect_uri: process.env.REDIRECT_URI,
            grant_type: 'authorization_code'
        }), {
            headers: {
                'content-type' : 'application/x-www-form-urlencoded',
                accept: 'application/json',
            }
        });
        return res.data;
    };
    
    const getCode = async () => {
        const uri = `${process.env.BASE_URL}/oauth/2.0/authorize`;
        const res = await axios.get(uri, {
            params: {
                response_type: 'code',
                client_id: process.env.CLIENT_ID,
                redirect_uri: process.env.REDIRECT_URI,
                scope: 'login inquiry transfer',
                client_info: 'test',
                state: 'b80BLsfigm9OokPTjy03elbJqRHOfGSY',
                auth_type: '0'
            }
        });
    
        return makeResult(null, { location: res.request?.res?.responseUrl }, 301);
    };

    2. 이용 기관 token 발급

    const axios = require('axios');
    const qs = require('qs');
    
    const makeResult = (data, headers = {}, code = 200) => ({ statusCode: code, body: data, headers, });
    
    exports.handler = async (event) => {
        try {
            const tokenRes = await getToken();
            if (!tokenRes.access_token) return makeResult(JSON.stringify(tokenRes));
            const { access_token, client_use_code } = tokenRes;
            return makeResult(JSON.stringify({ access_token, client_use_code }));
        } catch (e) {
            console.log(e);
        }
    };
    
    const getToken = async () => {
        const uri = `${process.env.BASE_URL}/oauth/2.0/token`;
        const res = await axios.post(uri, qs.stringify({
            client_id: process.env.CLIENT_ID,
            client_secret: process.env.CLIENT_SECRET,
            scope: 'oob',
            grant_type: 'client_credentials'
        }), {
            headers: {
                'content-type' : 'application/x-www-form-urlencoded',
                accept: 'application/json',
            }
        });
        return res.data;
    };

     

Designed by Tistory.