인증 (Authentication)
- 사용자가 누구인지 확인하는 단계
- 로그인과 같이 신원을 확인하는 단계
API
- 401 Unauthorized
- 인증이 안된 상태로 자원을 이용할 수 없는 상태를 의미한다.
인가 (Authorization)
- 사용자의 요청에 대해 권한을 확인하는 단계
- 일반 사용자인지 관리자인지 등 접근 권한을 확인한다.
API
- 403 Forbidden
- 권한이 없는 상태로 자원을 이용할 수 없는 상태를 의미한다.
인증 (Authentication) 과 인가 (Authorization)
인증
은 KEY
라 볼 수 있고 인가
는 해당 KEY
에 대한 권한을 확인한다.
인증
은 사용자에 의해 시작되는 반면 인가
는 정책에 의해 결정된다.
웹 사이트는 어떻게 인증 (Authentication) 과 인가 (Authorization)을 구현하는가?
웹 사이트는 stateless
한 특성을 가진 HTTP 통신 위에서 동작하여 로그인을 통해 인증
을 거치더라도 이전의 인증된 상태인지를 유지하지 않기에 아래와 같은 방법으로 구현할 수 있다.
- Cookie
- 서버는 사용자에게 인증과 함께 데이터를 전송하며 이 때 이 데이터(
Cookie
)를 브라우저가 보관해두고 요청할 때마다 함께 전송하는 방식
- 사용자의 인증된 정보를 사용자 웹 브라우저에서 관리되므로 보안상 문제가 있는 단점이 있다.
- Session
- 사용자의 정보가 아닌 식별할 수 있는 값만 보관하는 방식
- 서버에서 식별할 수 있는 값을 판단하고 관리할 수 있어야 한다.
- 서버에 세션을 저장하므로 서버에 부하가 올 수 있다.
- Token
- 사용자를 인증할 수 있는 정보를 암호화하고 서버는 복호화하여 사용자를 식별하는 방식
Token
의 종류는 다양하지만 JWT(JSON Web Token)
을 주로 사용한다.
- 유효기간이 완료될 때까지 사용 가능하므로
Token
이 탈취당하면 대처하기 어렵다.
Reference