TIL79. 인증&인가
세션진행: 지훈님
인증이란?
- 로그인 절차에서 정확한 이메일/비밀번호 조합을 입력했는지 확인하는 과정
인증은 왜 필요한가?
- 우리 서비스를 누가 쓰는지? 어떻게 사용하는지? 추적이 가능하도록 하기 위해 필요하다.
인증에 필요한 것
- 아이디,이메일주소,비밀번호
- 이 중에서 가장 중요한 것은 비밀번호
비밀번호는 어떻게 관리?
- 데이터베이스에 저장 시 개인정보를 해싱하여 복원할 수 없도록 함.
해쉬 (단방향 해쉬)
- 본래 해쉬함수는 자료구조에서 빠른 자료의 검색,데이터의 위변조체크를 위해서 쓰지만, 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용한다.
단방향 해쉬의 보완점 salting과 key stretching
- salting과 key stretching이라는 것을 추가.
- 비밀번호와 임의로 생성한 문자열(salt)를 합쳐 해싱하여 이 해시값을 저장
- key stretching은 단방향 해쉬값을 계산 한 후 그 해쉬값을 또 또 해쉬 하고, 또 이를 반복하는 것을 말한다.
- 말그대로 소금치고 늘린다.
bcrypt
- 앞서 말한 개념들(단방향 해쉬, salting, key stretching)을 실제로 적용하기 편하게 해주는 대표적인 라이브러리이다.
- 해쉬 결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 있어 db설계를 복잡하게 할 필요없다.
- 우리 서비스를 누가 쓰는지? 어떻게 사용하는지? 추적이 가능하도록 하기 위해 필요하다.
인증에 필요한 것
- 아이디,이메일주소,비밀번호
- 이 중에서 가장 중요한 것은 비밀번호
비밀번호는 어떻게 관리?
- 데이터베이스에 저장 시 개인정보를 해싱하여 복원할 수 없도록 함.
해쉬 (단방향 해쉬)
- 본래 해쉬함수는 자료구조에서 빠른 자료의 검색,데이터의 위변조체크를 위해서 쓰지만, 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용한다.
단방향 해쉬의 보완점 salting과 key stretching
- salting과 key stretching이라는 것을 추가.
- 비밀번호와 임의로 생성한 문자열(salt)를 합쳐 해싱하여 이 해시값을 저장
- key stretching은 단방향 해쉬값을 계산 한 후 그 해쉬값을 또 또 해쉬 하고, 또 이를 반복하는 것을 말한다.
- 말그대로 소금치고 늘린다.
bcrypt
- 앞서 말한 개념들(단방향 해쉬, salting, key stretching)을 실제로 적용하기 편하게 해주는 대표적인 라이브러리이다.
- 해쉬 결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 있어 db설계를 복잡하게 할 필요없다.
- 데이터베이스에 저장 시 개인정보를 해싱하여 복원할 수 없도록 함.
해쉬 (단방향 해쉬)
- 본래 해쉬함수는 자료구조에서 빠른 자료의 검색,데이터의 위변조체크를 위해서 쓰지만, 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용한다.
단방향 해쉬의 보완점 salting과 key stretching
- salting과 key stretching이라는 것을 추가.
- 비밀번호와 임의로 생성한 문자열(salt)를 합쳐 해싱하여 이 해시값을 저장
- key stretching은 단방향 해쉬값을 계산 한 후 그 해쉬값을 또 또 해쉬 하고, 또 이를 반복하는 것을 말한다.
- 말그대로 소금치고 늘린다.
bcrypt
- 앞서 말한 개념들(단방향 해쉬, salting, key stretching)을 실제로 적용하기 편하게 해주는 대표적인 라이브러리이다.
- 해쉬 결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 있어 db설계를 복잡하게 할 필요없다.
- salting과 key stretching이라는 것을 추가.
- 비밀번호와 임의로 생성한 문자열(salt)를 합쳐 해싱하여 이 해시값을 저장
- key stretching은 단방향 해쉬값을 계산 한 후 그 해쉬값을 또 또 해쉬 하고, 또 이를 반복하는 것을 말한다.
- 말그대로 소금치고 늘린다.
bcrypt
- 앞서 말한 개념들(단방향 해쉬, salting, key stretching)을 실제로 적용하기 편하게 해주는 대표적인 라이브러리이다.
- 해쉬 결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 있어 db설계를 복잡하게 할 필요없다.
bcrypt를 사용하려면
1. pip install bcrypt
2. import bcrypt
password ='1234'
bcrypt.hashpw(password, bcrypt.gensalt())
<예시>
hashed_password = bcrypt.hashpw(password.encode('utf-8'), bcrypt.gensalt()).decode('utf-8') # b까지 스트링으로 치기 때문에 encode후에 다시 decode하는 것!
인가란?
- 사용자가 서버에 요청을 보내면 인증과정을 거쳐 확인된 사용자가 맞는지 확인하는 과정이 바로 인가 이다.
- http의 stateless한 성질 때문에 매 http요청마다 headers를 활용하여 사용자가 인증 절차를 거친 사용자임을 증명하는 정보를 담아서 보내는 방법이다.
기존 인증/인가 방식
Json Web Token(JWT)
- 헤더에는 어떤정보가 들어가는지?
- 토큰의 타입과 해시알고리즘 정보가 들어간다.
- 헤더의 내용은 BASE64방식으로 인코딩해서 JWT의 가장 첫부분에 기록된다.
- 내용에는 어떤 정보가 들어가는지?
- 내용에는 exp와 같이 만료시간을 나타내는 공개 클레임
(ex: 로그아웃 시간이 30분 남았습니다.) - 클라이언트와 서버간 협의하에 사용하는 비공개 클레임
- 그 외 어떤 내용이던 상관없이 추가 가능
- 서명에는 어떤 정보가 들어가는지?
- JWT가 원본 그대로라는 것을 확인할 때 사용하는 부분
- 프론트엔드가 JWT를 백엔드 API 서버로 전송하면 서버에서는 전송받은 JWT의 서명 부분을 복호화하여 서버에서 생성한 JWT가 맞는지 확인
- 마치 계약서의 위변조를 막기 위해 서로 사인하는 것과 같다고 보면 된다.
- 주의할 점은 header와 payload는 BASE64 인코딩한것(암호화 아님)이므로 개인정보를 담으면 안된다.
JWT를 활용한다면?
wrap-up
- 단방향 해쉬 : 저장을 하면 개발자도 모른다.
- 양방향 해쉬: 다시 풀어서 보면 숫자가 그대로 나온다.
(ex: 주민등록번호)
- salting & key stretching: 단방향 해쉬로만으로는 해킹이 쉬우므로 salting과 key stretching으로 해커가 해킹을 하는데 어려움을 겪게 하기위해 사용을 한다.
Author And Source
이 문제에 관하여(TIL79. 인증&인가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@dnjs0718/TIL79.-인증인가
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
(ex: 주민등록번호)
Author And Source
이 문제에 관하여(TIL79. 인증&인가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dnjs0718/TIL79.-인증인가저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)