TIL 22_인증&인가
인증
&인가
는 웹 개발을 하는 사람이라면 기본적으로 알고 있어야 하는 지식! 인증과 인가 절차 및 인증의 필수요소인 패스워드 암호화, JWT에 대해 알아보자!
인증은 무엇이고 왜 할까? 🔑
인증(Authentication)
인증은 유저의 identification을 확인하는 절차이다.
인증이 없으면 사용자 확인 및 식별이 불가하고 추적이 가능하게끔 하기 위함이다.
인증에 필요한 것은?
아이디, 이메일, 주소, 비밀번호 등등 (비밀번호는 법적으로 암호화가 필요)
암호화 🔐
유저의 비밀번호 관리
- 유저의 비밀번호는 절대 비밀번호 그대로 DB에 저장하지 않는다.
- DB에 저장 시 개인 정보를 해싱(난독화)하여 복원할 수 없도록 한다.
- 통신 시 개인 정볼르 주고 받을 때 SSL을 적용하여 암호화한다.
단뱡향 해쉬
본래 해쉬함수는 자료구조에서 빠른 자료의 검색, 데이터의 위변조 체크를 위해 쓰인다. 복원이 불가능한 단방향 해쉬함수는 암호학적 용도로 사용한다. ex) MD5, SHA-1 SHA-256
'1234'
→ 03ac67431......
그런데 계속해서 '1234'
를 input으로 넣으면 반복해서 똑같은 값이 나온다. 이런 현상은 위험하기 때문에 SALTING과 Keystretching이 생기게 되었다.
SALTING과 Keystretching
- 단순 해쉬값이 해킹에 쉽게 노출되기 때문에
Salting
이라는 아이디어가 생겨났다.- 입력한 비밀번호와 임의로 생성한 문자열(Salt)를 합쳐서 해싱해서 이 해시값을 저장하는 방법이다. 물론 이 때 비교를 위해 해시값과 소금값을 같이 저장해야 한다.
- 여기에 해커가 패스워드 무작위 대입을 통해 해시값을 계산하는데 필요한 시간을 대폭 늘리기 위해 솔팅 및 해싱을 여러번 반복해서 원본 값을 유추하기 어렵게 만드는 것이
Keystretching
이다.
Bcrypt
Salting
과 Key Stretching
을 구현한 해쉬 함수중 가장 널리 사용되는 것이 Bcrypt
이다.(대표적 라이브러리)
Bcrypt는 해시 결과값에 소금값과 해시값 및 반복횟수를 같이 보관하기 때문에 비밀번호 해싱을 적용하는데 있어 DB설계를 복잡하게 할 필요가 없다.
인가란 무엇인가?
인가
- 사용자가 서버에 로그인하면 해당 사용자가 맞는지 확인하는 과정이 바로 인가!
서버는 사용자가 로그인 했을 경우, 로그인 했다는 것을 어떻게 알까?
- 바로 Headers에 메타데이터를 보내서 확인함.
- 이 메타 정보를 바로 JSON WEB TOKEN(JWT)이라고 함.
JSON Web Token
앞서 언급했듯이 유저가 로그인에 성공한 후에는 access token
이라고 하는 암호화된 유저 정보를 첨부해서 request를 보내게 된다.
- 유저 로그인
POST /auth HTTP/1.1
Host: localhost:5000
Content-Type: application/json
{
"username": "joe",
"password": "pass"
}
- access token
HTTP/1.1 200 OK
Content-Type: application/json
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E"
}
그러면 서버에서는 access token
을 복호화 해서 해당 유저 정보를 얻게 된다.
- 예를들어 access token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZGVudGl0eSI6MSwiaWF0IjoxNDQ0OTE3NjQwLCJuYmYiOjE0NDQ5MTc2NDAsImV4cCI6MTQ0NDkxNzk0MH0.KPmI6WSjRjlpzecPvs3q_T3cJQvAgJvaQAPtk1abC_E
를 복호화 하면 다음과 같은 정보를 얻는다
{
user_id = 1
}
- 복호화해서 얻은 유저 아이디를 통해 해당 유저가 누군지 알 수 있다.
- 유저가 권한을 가지고 있으면 해당 요청을 처리하고, 권한이 없다면 401 혹은 다른 에러 코드를 보낸다.
Author And Source
이 문제에 관하여(TIL 22_인증&인가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rhfovk/TIL-22인증인가저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)