-
[오픈뱅킹] 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; };
'개발' 카테고리의 다른 글
[AWS] S3에 정적 웹 호스팅 (0) 2022.05.24 [오픈뱅킹] OpenAPI로 사용자 인증 (0) 2022.05.11 AWS 같은 계정 내 VPC Peering (0) 2022.04.18 AWS에 MongoDB ReplicaSet 구축 (PSA구조) (0) 2022.04.18 AWS Private Instance에 설치한 MongoDB Robo 3T로 접근 (0) 2022.04.14