일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Spring Boot
- 가사 검색
- 티스토리
- 프로그래머스
- 트라이
- pycon
- 티스토리 open api
- 카카오 인턴
- jdbc
- 불량 사용자
- CleanCode
- Tistory
- 보행자 천국
- 튜플
- 호텔 방 배정
- Open API
- bulk update
- 트라이 #trie #알고리즘
- 징검다리 건너기
- Python
- trie
- 크레인 인형뽑기 게임
- 알고리즘
- Today
- Total
택시짱의 개발 노트
7장. 인증 본문
시스템적으로(프론트엔드와 백엔드 API상에서의 절차) 로그인 기능은 다음과 같은 절차를 통해 구현될 수 있다.
1. 먼저 사용자 가입 절차를 진행해서 사용자의 아이디와 비밀번호를 생성해야 한다. 미니너 API의 경우 sign-up 엔드포인트를 통해서 사용자 가입을 할 수 있다.
2. 가입한 사용자의 아이디와 비밀번호를 데이터베이스에 저장한다. 이때 사용자의 비밀번호는 암호화해서 저장한다.
3. 사용자가 로그인할 때 본인의 아이디와 비밀번호를 입력한다.
4. 사용자가 입력한 비밀번호를 암호화한 후, 그 값을 이미 암호화되어서 DB에 저장된 비밀번호와 비교한다.
5. 비밀번호가 일치하면 로그인 성공이다.
6. 로그인에 성공하면 백엔드 API 서버는 access token을 프론트엔드 혹은 클라이언트에게 전송한다.
7. 프론트엔드 서버는 로그인 성공 후 다음부터는 해당 사용자의 access token을 첨부해서 request를 서버에 전송함으로써 매번 로그인하지 않아도 되도록 한다.
- 인증 절차는 대부분의 API들이 필요로 하는 기능이다.
- 사용자 비밀번호는 꼭 단방향 해서 암호화해서 저자해야 한다. 그리고 bcrypt와 같이 rainbow attack을 막아주는 단방향 암호알고리즘을 사용하는 것이 더욱 안전하다.
- HTTP 통신은 stateless이므로 해당 통신 전에 인증 절차를 거치는 통신이 있었는지 대해서 알 수 없다. 그러므로 모든 HTTP 통신에 인증 여부 정보를 첨부해야 한다. 이러한 것을 가능케 해주는 것이 access token이다.
- access token은 JWT(JWON Web Token)을 사용해서 생성될 수 있다. JWT를 생성할 때 조심해야할 점은 민감한 사용자의 개인정보는 포함시키지 말아야 한다는 것이다.
- 인증 절차를 엔드포인트들에 적용시키기 위해서 decorator를 사용할 수 있다.
단방향 암호화 알고리즘 (참고하면 좋은 포스트)
- d2.naver.com/helloworld/318732
1) bcrypt 란?
- bcrypt는 Blowfish 암호에 따라 Niels Provos 및 DavidMazières에 의해 디자인 된 암호 해시 함수로 1999 년에 USENIX에서 발표되었습니다. 레인보우 테이블 공격으로부터 보호하기 위해 salt를 이용할 뿐만 아니라, 시간이 지남에 따라 반복 횟수를 늘려 늦출 수 있기 때문에 계산 능력이 증가해도 공격에 대한 내성을 유지할 수 있습니다
2) rainbow attack 란?
- 레인보우 테이블은 해시 함수(MD5, SHA-1, SHA-2 등)을 사용하여 만들어낼 수 있는 값들을 대량으로 저장한 표이다. 1980년 마틴 헬만에 의해 소개되었고 MD5 암호화가 쉽게 복호화될 수 있다는 것을 보여준 해킹기법 중 하나이다. 하나의 패스워드에서 시작해 변이된 형태의 여러 패스워드를 생성하여 그 패스워드의 해시를 고리처럼 연결해 일정 수의 패스워드와 해시로 이루어진 테이블이다. 조합 가능한 모든 문자열을 하나씩 대입해 보는 방식으로 문제를 푸는 브루트 포스 공격을 뒷받침 해주는 역할을 하기도 하고 해시에서 평문을 추출해내기 위함의 역할도 있다.
'책 읽고 정리 > 깔끔한 파이썬 탄탄한 백엔드' 카테고리의 다른 글
10장. API 아키텍처 (0) | 2020.11.04 |
---|---|
8장. unit test (0) | 2020.10.27 |
6장. 데이터베이스 (0) | 2020.10.25 |
5장. 본격적으로 API 개발하기 (0) | 2020.10.25 |
4장. HTTP의 구조 및 핵심 요소 (0) | 2020.10.25 |