JWT / OAuth

gogigogigogi·2024년 12월 11일

세션 , 쿠키처럼 로그인하는 방법을 제공하는 것중 하나

oauth:
open authorization
서드파티 어플리케이션:

하나의 프로토콜

다른 서비스업체의 인

엑세스 토큰
권한에 접근할수 있는 권한이 담긴 토큰

리프레시 토큰
엑세스 토큰이 만료되는 경우 재발급하기 위해서 사용하는 토큰

베어러 토큰
토큰을 서버에 제출해서 인증하는 과정을 거쳐야 하는데 이때 사용하는 방법중 하나를 베어러라고 한다.
bearer라는 문자열을 넣는 이유는 Bearer는 OAuth 2.0에서 사용되는 인증 방식으로, 토큰 기반 인증 시스템에서 토큰을 인증 정보로 사용하는 방식을 정의한 표준이기 때문이다.

jwt
엑세스 토큰을 안전하기 사용하기 위해 필요한 형식 JSON
세가지 객체가 문자열 형태로 변환된 형태이다

Header, payload, signature로 3가지

payload
iss sub iat 미리 등록된 클레임
그 외 내가 저장할 값 등록

시그니쳐

jwt 작동방식

클라이언트에서 요청이 오면 서버에서 로그인될 유저인지 확인
서버에서 토큰을 만들고 서버 정보를 담아서 응답한다(토큰은 세션처럼 서버에서 관리하지 않는다. 토큰은 클라이언트에서 관리된다)
그 후 클라이언트에서 요청마다 토큰을 담아서 보낸다. 그리고 서버는 다시 토큰을 검증하고 처리한다

생성과 검증은 서버
관리는 클라이언트쪽에서

sign - payload 부분에 넣을 데이터를 넣는다

verify

클라이언트에서 토큰을 받아 저장을 해야한다.
로컬스토리지, 세션스토리지, 쿠키 등에해야함
왜 메모리에 담아서 쓰면안되나??- 새로고침하면 토큰 데이터가 날아감

상태코드
401 - unbauthorized
없는 사용자가 로그인하는 경우 로그인 실패

403 - forbidden
일반유저가 admin 페이지로 접속하는경우 권한 없음

왜 상태코드를 이렇게 보내야하나? 그냥 200번 성공으로 응답하면 안되나?
클라이언트측에서

로그인하면 페이로드에 id값을 담아 토큰으로 만든다. 만든 토큰을 클라이언트로 보낸다
토큰이 만들어진것 자체가 로그인이 성공된것으로 간주
클라이언트쪽에서는 발급받은 토큰을 저장해야 한다.(로컬, 세션 스토리지, 쿠키, 메모리 등)

토큰 중 페이로드는 누구나 복호화 할수있기 때문에 중요한 정보는 페이로드로 넘기지 않는다

그럼 form태그로 로그인할때 토큰을 받지 못하나? axios가 아니라서

즉시실행함수를 쓰는이유?????

        // 토큰 정보는 body가 아닌 header에 담아서 보낸다.
        왜냐면 post일때, get 일때 둘다 토큰을 보낼수있으려면 헤더에 보내야하기때문
        post는 body에 넣지만 get은 그럴수없기 때문. 따라서 헤더에 보내는것이 맞다

클라이언트가 가진

클라이언트에서 서버로 보낼때는베어러라는 이름을 붙여야하는 약속이 있다
근데 어차피 서버측에서도 베어러 문자도 같이 받고 나눠야하는데 왜 굳이 보내나?????

try catch 안에 또 try catch 를 쓸 이유가 있나????

jwt.verify 로 확인하면 페이로드가 반환된다

암호화

데이터베이스에 저장되는 정보는 평문(암호화되지 않은)이 아니라 암호화를 시켜서 저장해야 한다.

utf-8 인코딩은 무슨 의미?
buffer는 무슨의미?

npm init 하고 안하고 모듈설치할때 무슨차이??????

단방향 -
단방향암호화의 의미가 있나 복호화가 안되면 누가 복호화를 할수있나?

양방향 -https 에서 양방향 암호화를 사용한다. 데이터를 복화해서 쓸 필요가 있을때

암호화, 복호화할때 키가 동일한것 -> 대칭키
암호화, 복호화할때 키가 다른것 -> 공개키. 개인키

Crypto
는 node에 내장 모듈

createHash 단방향:
update()
digest 어떤 방식으로 인코딩할지 결정

pbkdf2sync 단방향

Bcrypt
는 설치를 해서 사용

app.use(express.static('public'));
app.use(express.static('files'));
여기서 정적파일 제공 url은 /이다
정적파일을 제공하는 디렉토리를 여러개 등록해놓으면 등록한 순서대로 public -> files폴더 순으로 해당 하는 파일을 찾는다.

0개의 댓글