[MEMO APP] Back-end/ Session&Token-Register (1)
👨💻 Session&Token (1)
지난 포스팅에 저희는 실제로 DB에 데이터들이 저장되는것까지 구현을 완료했습니다.
이제 회원가입시 회원정보가 유지되도록 하는 기능을 구현해 보도록 할껀데요, 이를 위한 토큰을 생성하는 작업을 먼저 이번 포스팅에서 다뤄보도록 하겠습니다.
📌 Web token
보안 및 인증을 위해 사용하는 일종의 열쇠같은 문자열덩어리 입니다.
주로 의미가 없는 문자열(랜덤한 문자열) 기반으로 구성되어있고 특정한 정보를 암호화해서 문자열화시켜 사용자에게 발급하는 방식입니다.
그리고 사용자는 인증을 위해서 서버에 해당 토큰을 들고와 반납하고 이것을 우리가 읽어서 인증된 유저인지 식별하는것입니다.
우리는 웹토큰중에서도 클래임(Claim)기반 토큰을 사용하겠습니다.
Claim한 토큰이란 일반적인 토큰에는 단순한 문자열덩어리기 때문에 특정한 정보를 담기가 어렵다는 단점이 있습니다.
하지만, 우리가 사용할 Claim기반 토큰은 정보를 담을 수 있는데 이때 Claim은 사용자 정보나 데이터 속성등을 의미합니다.
직접 구현해서 사용하기에는 저의 내공이 부족함으로 이미 잘 만들어져있는 모듈을 가져다가 사용하도록 할텐데요, 우리가 사용할 모듈은 바로 Json Web Token 입니다.
그럼 우리의 프로젝트에 install 해보도록할게요.
( yarn add jsonwebtoken )
/* Json Web Token에 대한 구체적인 설명은 존경하는 velopert님의 글을 발췌해왔습니다. */
Json Web Token은 총 3가지의 정보를 가지고 있습니다.
-
Header (헤더)
-
Payload (내용)
-
Signature (서명)
Header는 두가지의 정보를 가지고 있습니다.
-
type : 토큰의 타입을 지정합니다.
-
alg : 해싱 알고리즘을 지정합니다.
Payload는 토큰에 담을 내용들이 포함되어 있습니다. 여기에 담는 정보의 한 조각을 클레임(Claim)이라고 부르고, 이는 name/value 한쌍을 가지고 있습니다. 그리고 복수개의 클레임을 토큰에 담는것도 가능합니다.
그리고 이 클레임의 종류는 총 3가지가 있으며 각각 아래와같이 구분되어 집니다.
- (등록된) registered claim
- (공개) public claim
- (비공개) private claim
이중에 registered claim은 서비스에 필요한 정보들이 아닌, 토큰에 대한 정보들을 담기위하여 이름이 이미 정해진 클레임들입니다.
이 클레임에 포함된 클레임들의 이름들은 아래와 같이 있습니다.
|
Public claim은 충돌이 방지된 이름을 가지고 있어야 합니다. 충돌을 방지하기 위해서는, 클레임 이름을 URI형식으로 짓습니다.
{
"https://localhost.com/4000/jwt_claims/is_admin": true
}
Private claim은 등록된 클래임도 공개 클래임도 아니고 양측(서버와 클라이언트)간에 협의하에 사용하는 클레임 이름입니다.
Example ( velopert 블로그 예시내용 발췌 )
{
"iss": "gorillaKim.com",
"exp": "1485270000000",
"https://gorillaKim.com/jwt_claims/is_admin": true,
"userId": "11028373727107",
"username": "gorillaKim"
}
Signature는 헤더의 인코딩값과, 정보의 인코딩값을 합친후 주어진 비밀키로 해쉬하여 생성합니다.
위의 내용을 토대로 우리가 사용할 토큰 생성함수와 그 토큰을 해독시켜주는 함수를 만들어 보도록 하겠습니다.
token.js 파일을 만들껀데 이렇게 보조로 도와주는 파일들을 src 폴더안에 lib라는 폴더를 만들어서 따로 관리하도록 하겠습니다.
다음의 그림처럼 폴더와 파일을 구성해주세요.
그리고 token.js에 두개의 함수를 마저 작성해보도록 할게요.
처음으로 토큰 생성함수입니다.
- payload는 외부에서 생성하여 받아 jsonwebtoken으로 넘겨줍니다.
- 그리고 secret은 우리가 만들 토큰을 해쉬화 하기위해 사용하는 salt라 불리는 일종의 문자열입니다.
여기서 secret값은 보안상의 이유로 소스코드상에서 감춰주는것이 좋음으로 .env 파일에 만들어서 불러와 사용해줍니다.
그리고 토큰을 생성했으니 이 토큰을 해독해주는 decode함수도 만들어주겠습니다.
그리고 마지막으로 두 함수를 외부로 보내주는 export작업도 해주겠습니다.
여기까지 오늘은 토큰을 읽고해석하는 함수를 만들어 보았습니다. 다음 포스팅에서는 이 토큰함수들을 활용해서 회원가입 절차 성공시 토큰을 발급하는 부분을 완성시켜주도록 하겠습니다.
'Gorilla-Kim > Project' 카테고리의 다른 글
[MEMO APP] Back-end/ REST API+Session&Token-Login (0) | 2020.03.20 |
---|---|
[MEMO APP] Back-end/ Session&Token-Register (2) (0) | 2020.03.19 |
[MEMO APP] Back-end/ REST API-Register (3) (0) | 2020.03.18 |
[MEMO APP] Back-end/ REST API-Register (2) (0) | 2020.03.18 |
[MEMO APP] Back-end/ REST API-Register (1) (0) | 2020.03.18 |