인증과 인가

samdaso-o·2021년 7월 26일
1

Django

목록 보기
7/9
post-thumbnail

django에는 암호화를 위한 Bcrypt라는 라이브러리가 있다.

bcrypt는 bytes데이터를 암호화한다. 따라서 암호화시에 bytes화 해야한다. 혹시나 str타입으로 데이터베이스에 저장해야되는경우 decode()으로 한번 더 타입을 변경해주면 된다.
대략적인 결과값의 구조는 다음 아래의 그림과 같다.

사용된 알고리즘+salt+해쉬로된 패스워드순이다.
이렇게 알고리즘과 salt가 공개가 되면 보안에 문제가 생기는것이 아닌가라는 의문이 들겠지만 그저 salt는 공격을 늦추기 위한 방어책일뿐이다.

-받은 비밀번호를 바이트화 하는 코드

-로그인을 위해 입력받은 비밀번호를 기존 비밀번호와 비교하는 코드

위 두문장은 기본적으로 사용되는 문장으로 예시로 첨부해보았다.

-JWT
JWT는 인증을 위한 JSON WEB Token의 줄임말로 클라이언트가 로그인 후 일정시간 또는 로그인을 하고 있는 동안 사용자 확인을 위한 인증이다.
JWT의 구조로 크게 3가지로 나뉘는데 header,payload,signature로 나뉜다.

header에는 토큰의 타입과 해시 알고리즘정보가 들어가고 가장 첫 부분에 기록된다.누구나 원본을 볼 수 있으므로 개인정보를 담아서는 안된다.
ex) {'alg':'HS256','typ':'JWT'}

payload는 내용이라는 뜻으로 만료시간을 나타내거나, 클라이언트와 서버간의 협의하에 사용하는 비공개 클레임등등이 들어간다.누구나 원본을 볼 수 있으므로 개인정보를 담아서는 안된다.
ex) {'user-id':1,'exp':15393784}

signature는 JWT가 원본 그대로라는 것을 확인할때 사용하는 부분이다. signature는 base64url 인코드된 header와 payload 그리고 JWT secret(별도생성)을 헤더에 지정된 암호 알고리즘으로 암호화해 전송함.(복호화가능)


-jwt함수로 token을 만드는 코드이다.

-발행한 토큰이 맞는지 확인하기위해 encode할때 넘겨 주었던, header의 값을 알아내 유저를 식별 할수있다.

profile
ㅎㅅㅎ

0개의 댓글