[인증/인가 + 에러 핸들링]

1652 단어 BackendBackend

1️⃣ 인증/인가

1. 회원가입

비밀번호 어떻게 관리해야 하는가?

법률상의 강제
database에 저장할 때 개인정보를 해싱해서 복원할 수 없도록 해야 한다.

  1. 통신 시 개인 정보를 주고 받을 때 ssl을 적용하여 암호화(HTTPS)

  2. 암호화

  • 단방향 해쉬
    해쉬 함수는 자료구조에서 빠른 자료의 검색, 데이터의 위변조 체크를 위해서 쓰이지만, 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용합니다.
    단점: 같은 알고리즘에 넣으면 비밀번호 해석 가능합니다. => 해킹문제

  • SALTIN & KeySretching
    - 소금을 치고 늘린다.
    입력한 비밀번호와 임의로 생성한 문자열을 합쳐서 해싱해서 이 해시값을 저장하는 방법입니다. 해킹에 시간이 오래걸리도록 salting및 해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 합니다.
    - 대표적인 라이브러리: bcrypt

2. 로그인 (인증)

유저 아이디와 비밀번호 비교

DB의 정보와 비밀번호를 비교 해야 합니다. 그러나 단방향 해쉬이므로 DB에 있는 데이터를 원래의 비밀번호 형식으로 바꿀 수는 없습니다.
방법은 유저가 로그인하려고 입력한 값을 같은 방식으로 해싱하여 비교하는 것 밖에 없습니다.

로그인 성공/실패

에러 핸들링
에러에는 두 개의 종류가 있습니다. js상의 에러와, 커스텀에러입니다.
되도록 발생하는 오류들이 커스텀에러에서 걸러지도록 해아 합니다.

커스텀 에러 방법

  • try, thorw, catch
try{
	const err =  'message'
    err.statusCode = 400
	throw err 

}catch(err){

	return res.status(err.statusCode || 500).json( { message: err.message})
}

access token

로그인에 성공하면 사용자가 서비스를 이용 할 수 있도록 access token이라는 것을 줘야합니다. (Http는 stateless이기에 토큰을 주지 않으면 이전 통신을 기억하지 못합니다.)

Token 암호화하는 방법
-JWT(json web tokens)

3. 인가

유저가 요청하는 request를 실행할 수 있는 권한이 있는 유저인가를 확인하는 절차입니다.

복호화

유저도 요청을 보낼 때 암호화된 token을 첨부합니다. 이 유저가 누구인지를 알아야하기에 암호화를 복호화합니다.

복호화하는 방법

  • JWT

좋은 웹페이지 즐겨찾기