2회차
2021.02.17
2회차
오늘 공부한 내용
- BodyParser
- JWT
- paypal api
가지고 있는 데이터를 내가 원하는 형태의 데이터로 ‘가공'하는 과정을 parsing
이라 하며 그 과정을 수행하는 모듈 혹은 메소드를 parser
라 일컫는다.
BodyParser
: HTTP post put 요청시 request body 에 들어오는 데이터값을 읽을 수 있는 구문으로 파싱함과 동시에 req.body 로 입력해주어 응답 과정에서 요청에 body 프로퍼티를 새로이 쓸 수 있게 해주는 미들웨어
express 문서에 따르면 미들웨어 없이req.body 에 접근하는 경우에는 기본으로undefined 가 설정되어 있으므로 bodyParser, multer와 같은 미들웨어를 사용하여 요청 데이터 값에 접근해야 한다는 안내를 찾을 수 있다.
클라이언트 측에서 API post 와 put 메소드로 요청시 (get delete 는 불가하다.)
body 를 포함하여 보낼 수 있는데 이 값을 서버 측에서 받는다고 그대로 사용할 수 있는 것이 아니고 서버 내에서 해석 가능한 형태로 변형해야 사용할 수 있게 되는 것이다.
이때
API 요청에서 받은 body 값을 파싱하는 역할을 수행하는 것이 bodyParser 라는 미들웨어이다.
JWT
: JSON Web Token (JWT) 는 웹표준(RFC 7519)으로서 두 개체에서 JSON 포맷을 사용하여 가볍고 수용적인 자가수용(self-contained) 방식으로 정보를 안전하게 전달한다. 주로 회원 인증과 두 개체 사이에서 정보 전달을 할때 사용 된다.
구조
:
헤더 (Header)
Header는 typ와 alg 두가지로 구성 되어 있다.
- typ : 토큰의 타입을 지정 (JWT)
- alg : 해싱 알고리즘을 지정,
HAMAC SHA256
,RSA
을 사용한다. 이 알고리즘은 토큰을 검증 할 때 사용되는 signature 부분에 사용.
{
"alg": "HS256",
"typ": "JWT"
}
내용 (Payload)
Payload는 토큰에 담을 정보가 들어 있습니다. 여기에 담는 정보의 한 조각을 'claim' 이라고 부르고, 이는 Key / Value의 한 쌍으로 이루어져 있다. 토큰에는 여러 클레임들을 넣을 수 있다.
Claim의 분류는 총 세가지로 이루어져 있다.
- 등록된 (registered) 클레임
- 공개 (public) 클레임
- 비공개 (private) 클레임
-
등록된 클레임 (Registered Claim)
등록된 클레임은 토큰에 대한 정보를 담기위한 미리 정의된 클레임의 집합이다. 등록된 클레임의 사용은 선택적으로 사용 가능하지만 사용하는 것을 권장한다.
- iss : 토큰 발급자 (issure)
- sub : 토큰 제목 (subject)
- aud : 토큰 대상자 (audience)
- exp : 토큰 만료시간 (expiration), 시간은 NumericDate (
ex :1480849147370
) 형식이어야 하며 언제나 현재 시간 이후여야 한다. - nbf : Not Before 를 의미 하며, 토큰 활성 날짜와 비슷한 개념이다. NumericDate 형식이어야 하며, 이 날짜기 지나기 전까지는 토큰을 처리하지 않는다.
- iat : 토큰이 발급된 시간 (issued at), 이 값을 사용하여 토큰의 age가 얼마나 되었는지 판단 할 수 있다.
- jti : JWT 의 고유 식별자로서, 주로 중복적인 처리를 방지하기 위하여 사용 된다. 일회용 토큰에 사용하면 유용하다.
-
공개 클레임 (Public Claim)
공개 클레임은 사용자 정의 클레임으로. 공개용 정보 전달을 위해 사용된다. 충돌 방지를 위해 URI 포맷을 이용해야 한다.
{ "https://tandohak.co.kr/is_authenticated": true }
-
비공개 클레임 (Private Claim)
비공개 클레임은 등록된 클레임도 아니고, 공개 클레임도 아닌 당사자간에 정보를 공유하기 위해 만들어진 사용자지정 클레임이다. 공개 클레임과 달리 이름이 중복되어 충돌이 될 수 있으니 유의 해야 한다.
{ "username": "tandohak" }
페이로드의 예제
{
"iss": "tandohak.co.kr", // 등록된 클레임
"exp": "1485270000000", // 등록된 클레임
"https://tandohak.co.kr/is_authenticated": true, // 공개 클레임
"username": "tandohak" // 비공개 클레임
}
서명 (Signature)
서명은 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다. 서명은 위에서 만든 헤더와 페이로드의 값을 각각 BASE64로 인코딩 하고, 인코딩 한 값을 비밀 키를 이용하여 헤더에서 정한 알고리즘으로 해싱을 하고, 이 값을 다시 BASE64로 인코딩 하여 생성한다.
⇒ 인증방법으로 왜 jwt를 사용하는지 공부
JWT 는 Json Web Token 의 약자이며 authentication header 내에서 사용되는 토큰 포맷이다.
이 토큰은 두 개의 시스템끼리 안전한 방법으로 통신할 수 있도록 설계를 도와준다.
편의상 JWT 를 Bearer token 으로 부르기로 한다.
Bearer token 의 구성 요소는 header, payload, signature 이다.
- header: 토큰 타입과 암호화 방법을 보관하는 토큰의 한 부분으로 base-64 로 인코딩 된다.
- payload: 유저 정보, 상품 정보 등 다양한 종류의 정보를 저장할 수 있고, base-64 로 인코딩 된다.
- signature: header, payload, secret key 의 조합이다. secret key 는 서버에서 안전하게 보관되어야 한다.
JWT 의 장점은 계정 서버와 API 서버가 분리되어 있을 때 API 서버가 계정 서버로 토큰의 유효성 여부를 쿼리하지 않고
스스로 판단할 수 있다는 것이다.
Paypal
-
live(라이브 버전 - 실제 사용)
-
sandbox(샌드박스 버전 - 테스트 용)
-
개발 / 연동 / 테스트 할 경우 샌드박스 계정을 생성해서 사용해야 한다.
- 페이팔 한국 사이트에서 비지니스 계정으로 회원가입
- 페이팔 개발자 사이트에서 로그인 -
sandbox버튼을 클릭한 상태로 Create app 버튼 클릭 App Name 설정 샌드박스 비지니스 계정을 선택
-
App을 생성하면 Client Id 생성된다.
paypal checkout button 커스텀 - 페이팔 공식 문서
window.paypal.Button.render(
{
env: 'sandbox', //sandbox or live 선택
client: {
sandbox: clientId,//App 생성시 생긴 ID 입력(sandbox_client_id)
production: '',//실제 제품 출시할 경우 입력(production_client_id)
},
locale: 'en_US',//한국어 표시 - ko_KR 입력
style: {
//버튼 스타일 지정
size: 'responsive',//small, medium, large, responsive(공식문서 권장) - 너비에 따라 동적으로 결정
color: 'gold',//공식문서 추천 순 gold>blue>silver,white>black
shape: 'pill',//pill(알약모양) - 권장, rect(기본 버튼 모양)
},
commit: true,//지금 지불 활성화
payment(data, actions) {
return actions.payment.create({
transactions: [
{
amount: {
total: 1.00,
currency: 'USD',
},
},
],
});
},
onAuthorize: function (data, actions) {
// Optional: display a confirmation page here
return actions.payment.execute()
.then(function () {
// Show a success page to the buyer
});
}
}, '#paypal-button');
- 페이팔을 테스트 할 경우 sandbox Accounts에 있는 personal.example.com이메일로 로그인 해 결제를 시도해 본다.
- 결제후 business.example.com, personal.example.com 각각 계정의 설정 화면에서 Funding 탭 PayPal - Balance의 USD금액이 변경된 것을 확인한다.
느낀점
- 페이팔 api 사용법 너무 어려웠다 - 사용법 찾는데 시간이 너무 오래 걸렸다.
- 다음에는 네이버 페이, 카카오 페이, 페이코 api 연습!!
- HTTP, 네트워크 공부하기
Author And Source
이 문제에 관하여(2회차), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@wdh008/TIL-2회차저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)