@Reference
: 유저가 누구인지 확인하는 과정
ex) 회원가입, 로그인
: 유저에 대한 권한을 허락하는 것
ex) 게시판에서 다른 사람이 쓴 글을 나는 수정할 수 없다.
실생활 예시
일상생활에서 일어나는 경우가 컴퓨터 세계 속에서 비슷하게 일어나는 경우가 많다. 인증과 인가가 그러한 부분이다. 만약 내가 다니는 회사가 어떠한 건물에 8층에 위치한다고 해보자. 건물 출입구에는 내가 이 건물에 출입 가능한 사람인지 인증
의 과정을 거친다. 이후 나는 엘레베이터를 타고 8층으로 가 일을 하러 갈 것이다. 하지만 내가 11층에 있는 다른 회사에 출입할 수 있을까? 그것은 불가능하다. 그러할 권한이 없기 때문이다. 여기서 적용되는 개념이 인가
이다. 즉 권환을 확인하는 과정이다. 한편 이 예시에서 알 수 있듯이 인증
은 인가
에 선행되는 개념이다.
Request Header
Brower
Server
Token
OAuth
이 중 OAuth는 따로 게시물로 다루기로 하겠다!
http://<ID>:<Pssword>@www.myservice.com/login
request header
에 ID와 Password값을 넣어 전달한다.단점 : 매번 인증해야 한다.
브라우저의 스토리지
를 이용인증된 상태
를 유지단점 : 사용자에게 편한만큼, 해커에게도 해킹하기 편하다.
장점
단점
여러개의 서버를 두었을 때 문제가 생긴다. client가 한 서버에 요청을 해서 session ID를 전달 받았는데, 이후 다른 서버에 요청을 하면 그 서버에는 session ID가 없기 때문에 연결이 되지 않는다.
해결방안
이를 해결하기 위해 따로 세션 DB를 두는 방식이 있다. 하지만 이 또한 client가 많아졌을 때 DB가 터질 수도 있다.
client와 server한테도 맡겼으니 이번에는 요청과 응답
안에 사용자의 상태를 담아보자!! -> token
JWT(Jason Web Token)
secret key를 사용해서 JWT를 만들어낸다.
secret key를 통해 JWT의 인증 과정을 거친다.
JWT자체는 해독하기가 매우 쉽다. 그래서 비밀번호와 같은 민감한 정보
는 담지 않는다. 그리고 secret key가 중요한 만큼 노출이 되면 안된다. 그래서 서버 내부에서 잘 관리를 해야한다.
방법
단점
유효기간이 지나면 사용자는 계속 Access Token을 요청해야 한다. (해결 방안은 Refresh Token)