[HTTP] http에 대하여 - 인증/인가 (1)
📍 http - 인증/인가에 대하여 쫌 더 파보기
지난번 [http에 대하여] 글을 포스팅하면서 개인키/공개키, 관련 알고리즘 및 SSL에 대해서 간단히 정리했었다.
마침 오늘 오전 인증/인가 관련 세션이 진행되어 이어서 내용 정리해본다.
1
만약 마켓컬리에서 쇼핑하려면 먼저 회원가입을 해야 한다.
그러면 나의 account는 마켓컬리 database에 저장된다.
로그인을 하면, 나는 상품을 구매할 수 있다.
내 비밀번호는 중요한 개인정보이기 때문에 서버는 그대로 저장하지 않고 암호화 작업을 거친 후 저장한다. 이 때 hash 함수가 사용된다.
hash 함수
를 통해digest
가 생성됨 (단방향성임)- 원본 메세지를 알면 digest는 알 수 있음
- 하지만 digest를 알아도 원본 메세지는 알 수 없음
- 하지만
hash 함수
도 결국 digest 데이터를 만들기 때문에, 안전하지 않음. 그래서 추가로 하는 작업이salting
과key stretching
임salting
: 추가 랜덤 데이터를 생성해서 해쉬에 더하는 작업key stretching
: 생성된 digest에 hash작업을 추가로 하여 원본 데이터를 얻기 어렵게 만드는 작업 (공격자가 rainbow table을 만드는 것을 어렵게 함
이렇게 해서 최종 hash 값을 얻으면, 이를 최종적으로 database에 저장한다. 이렇듯 서버는 hash값을 통해 사용자를 식별할 수 있다. 이것이 Authentication
(인증) 이다.
2
http는 stateless 상태를 유지하기 때문에, 내가 한번 로그인을 했어도 http는 이를 계속 기억하지 못한다. 그런데 우리는 로그인을 새로 하지는 않는다.
이 때 사용되는 개념이 access token
이며, 이를 발행하는 여러 가지 기술 중에 하나가 JWT(JSON Web Token) 이다.
내가 마켓컬리에 회원 가입을 하고, 로그인을 했다고 가정하자.
이 때 서버는 로그인에 성공했다고 알려주면서 access token
을 준다.
그러면 나는 이제부터 이 token을 가지고 서버에 request(API 호출)를 하며, 서버는 이 token을 복호화해 내 정보를 확인하고 접근 허용을 해주는 것이다.
#나의 token을 복호화하면, id가 1번으로 등록되어 있는 user임을 확인함
{
user_id = 1
}
나는 권한이 있음이 확인되었으므로, 처리 되었다는 response를 받는다. 권한이 없을 경우, 서버는 401 등의 에러를 반환한다. 이것이 Authorization
(인가) 과정이다.
이러한 인증/인가 작업들을 django에서는 bcrypt 라는 라이브러리를 사용해 해결할 수 있다.
(220322 update) JWT는 아래와 같이 구성된다 - header/payload/signature
header에는 hash/token의 타입 및 hash 알고리즘 정보가,
payload에는 토큰 대상자,발급자,만료 시간 등의 정보가,
(payload 내용 조차도 인코딩만 하기 때문에 노출되면 안되는 정보들은 절대 넣지 않는다)
signature에는 서버에서 제공해준 개인키가 들어간다. 그래서 이 부분은 오직 서버만 복호화할 수 있다. (Django에서는 SECRET_KEY)
(220322 update)
payload란, 전송되는 데이터를 말하는데 정확히는 header/meta data는 제외한 데이터를 말한다.
{
"status":"OK",
"data": {
#payload는 아래 메세지라고 할 수 있다.
"message":"Hello, world!"
}
}
마지막으로 SSL은 이러한 클라이언트-서버 간의 통신을 잘 볼 수 없도록 세션 계층을 다시 한번 감싸주는 역할을 하는 것이다.
(SSL 인증서는 CA로부터 받아야 한다!)
참고 사이트
: https://pypi.org/project/PyJWT/, pyjwt 공식문서
:https://ko.wikipedia.org/wiki/%ED%8E%98%EC%9D%B4%EB%A1%9C%EB%93%9C_(%EC%BB%B4%ED%93%A8%ED%8C%85)
: https://bcp0109.tistory.com/321
Author And Source
이 문제에 관하여([HTTP] http에 대하여 - 인증/인가 (1)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mquat/HTTP-http에-대하여-인증인가저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)