Jaeilit

인증과 인가 본문

우테코테크톡

인증과 인가

Jaeilit 2021. 12. 9. 01:48
728x90

영상 https://www.youtube.com/watch?v=y0xMXlOAfss 

 

인증 서비스 사용 할 수있게 권한을 주는 것 

 

1. 인증하기 - Request Header

2. 인증 유지하기 - Browser (쿠키 등 클라이언트 저장)

3. 안전하게 인증하기 Server

4. 효율적으로 인증하기 Token (JWT)

5. 다른 채널을 통해 인증하기 (OAuth)

 

클라이언트 -> HTTP 통신 -> 서버

 

통신은 무상태성(Stateless) 

 

서버는 클라이언트가 보낸 요청과 이 다음 요청에 대한 연관관계가 없다.

 

id, pwd 를 url에 담아서 보내는데

그 url 부분을 파싱을 한 후에 base64 인코더를 통해서 인코딩을 하고

요청헤더 Authorization에 담아서 서버로 보낸다.

 

하지만 이 방식은 요청헤더를 계속 보내줘야함으로 계속 로그인을 해야하는 상황이 발생할수 있다.

 

그래서 브라우저의 스토리지를 사용한다.

로컬, 세션, 쿠키가 있지만 쿠키로 설명을 함.

 

로컬, 세션은 클라이언트에 저장하는 웹 저장소이지만

쿠키는 요청시에 HTTP에 계속 담겨서 날아가기 때문에 로그인 정보를 쿠키에 저장함

 

하지만 또 단점,

 

해커에 노출이 되어있다. 스토리지에 사용자 정보가 노출되어 있어서 보안에 취약

 

보안을 위해서 서버 세션의 도움을 받는다.

세션의 장점, 만료기간을 정할수있고 raw한 데이터를 클라우드가 가지지않음,

 

이 부분도 서버에서 단점이 생길 수 있다.

 

클라이언트에도 서버에도 사용자 정보를 가지고있기 힘들다.

 

그 다음으로는 요청과 응답에 맡겨보자

 

그래서 jwt 을 사용한다.

서버에서 시크릿 키를 이용해서 jwt 토큰을 만들어서 HTTP 헤더에 넣어서 요청과 응답을 받는다.

jwt를 클라이언트에서 서버로 쏘면 서버는 자기가 가진 시크릿 키로 해독을해서

어떤 유저인지, 만료시기는 언제인지, 권한은 어떤지 확인해본다.

디코딩하기 쉽기 때문에 비밀번호 같은 중요한 정보는 저장하지 않는다.

다시 단점,

 

해커가 accessToken을 탈취할 수 있다.

 

이를 막기 위한 방법은 만료기간을 정하는 방법이다.

 

만료된 토큰을 해커 뿐 아니라 사용자도 사용 할 수 없게 되는데
이때 나온 개념이 Refresh Token 이다.

accessToken은 서버에 저장하지 않고 Refresh Token만 저장한다.
클라이언트는 access Token과 RefreshToken 둘다 저장한다.

accessToken 만료 시,

 

accessToken 을 보냈더니 만료가 됬다.
그러면 서버에서 aceessToken 만료를 알려주고
클라이언트는 다시 accessToken과 RefreshToken을 같이 보낸다.
그러면 서버에서는 다시 새로 갱신한 aceessToken을 발급해준다.

 

결국 이 RefreshToken 도 탈취 당할 가능성이 있다.

완벽한건 없다..

 

 

 

728x90