인증, 인가
서비스에 대한 접근 제어. 보낼 수 있는 정보, 받을 수 있는 정보에 제한을 줌 eg)맴버십 서비스
API에서 가장 자주 구현되는 기능
인증 Authentication
- 회원가입, 로그인 (해당 유저가 그 유저가 맞는지 확인)
- 회원가입: 등록 절차를 거침
- 회원가입시 암호화된 비밀번호르 데이터베이스에 저장
- 로그인: 내가 동일 유저가 맞는지를 확인. 로그인 성공시 (유저가 입력한 정보와 데이터베이스 정보가 일치할 시) JWT를 발행하고, http response로 access token을 프론트 서버(클라이언트)에 전달
- 아이디, 이메일 주소, 비밀번호 (서비스마다 다름)
- 비밀번호: 유저, 서버만 알고 있음. 서버에서 데이터를 들고와서 같으면 인증 권한을 주는 과정
- 비밀번호, 바이오 정보, 주민등록번호는 꼭 암호화되야함 *<->복호화
- 암호화: 단방향 해쉬(One-way hash)
- 암호화된 값을 복호화하지 않고, 평문을 다시 동일하게 암호화해서 서로 비교. 암호화하는 방식을 각각 사이트마다 다르게 하기 위해 secret key, sort를 줌
- 임의로 생성한 문자열Salt 을 합쳐 해싱하여 해시값을 저장하는 것
- bcrypt : 단방향 암호화 하기위해 사용하는 라이브러리(해쉬함수)
- salting: 실제 비밀번호 이외에 추가적으로 랜덤 데이터를 더해서 해시값을 계산
- key stretching: 단방향 해쉬값을 계산한 후 그 해쉬값을 해쉬해서 반복하는 것
- 일반적으로 10번 반복(Algorithm options)
- 결과값 Digest 암호화된 메시지
- 회원가입: 등록 절차를 거침
인가 Authorization
- 사용자가 인증은 됬고, 인증 후 이 사람이 어떤 서비스에 접근 가능하게 할건지 정하는 것
- http의 특징: 1.요청, 응답 2.Stateless한 성질
- 서버는 사용자가 로그인할때 headers에 메타데이터를 보내서 확인함
- 메타정보: JSON web token, JWT (token도 암호화)
- 유저 정보를 담은 JSON 데이터를 암호화해서 클라이언트와 서버 간에 주고 받는 것
- JWT 구조 (.으로 구분함)
- header: 토큰타입JWT, 해싱 알고리즘 (양방향)
- payload: 나의 정보/고유식별 값/해당토큰의 만료시간 (양방향)
- signature: 정상적으로 암호화가 됬는지, 복호화가 불가능 (단방향 해쉬)
- 메타정보: JSON web token, JWT (token도 암호화)
'Node.js' 카테고리의 다른 글
백 엔드, 프론트 엔드 정리 (0) | 2022.06.17 |
---|---|
노드 Node.js 프로젝트 만들기 A-Z (0) | 2022.06.16 |
URL: 같은 파일이지만 서로 다른 페이지를 보여주는 방법 (0) | 2022.06.14 |
엔드 포인트Endpoint, 엔트리 포인트Entrypoint (0) | 2022.06.14 |
Layered pattern, 관심사의 분리 (feat. MVC pattern) (0) | 2022.06.14 |