인증 (Authentication) / 인가 (Authorization)은 항상 함께 등장하는 개념인 동시에 사용하기에 헷갈리는 용어이다. 그래서 서로 다른 개념이지만 이 둘의 차이를 두지 않고 종종 혼용되어 쓰이고 있다.
인증 (Authentication)
인증이란 어떤 개체 즉, 유저 혹은 디바이스에 대한 신원을 확인하는 절차 및 과정이다. 개체는 보통 어떤 인증 요소를 증거로 제시하여 자신을 인증한다. 예를 들어 은행에 가서 돈을 인출하려면 은행직원은 돈을 인출하는 사람이 누구인지 확인하기 위해 신분증을 제시해 달라고 요청할 수 있다. 더 간단히 말하면 어떤것을 검증할 수 있는 방법이다.
인가 (Authorization)
인가는 인증과 달리 어떤 개체 즉, 유저 혹은 디바이스에 대한 접근 권한이 있는지를 검증하는 것이다. 즉, 어떤 리소스에 접근할 수 있는지 또는 어떤 동작을 수행할 수 있는지를 검증하고 없을 시 거부할 수 있는 행위이다. 예를들어 비행 시 여권과 함께 가져가는 비행기 티켓은 여권으로 신분확인이 되더라도 비행기 티켓이 있어야 비행기에 탈 수 있다. 인터넷 기반 앱에서는 보통 토큰이라 부르는 것을 사용한다. 유저는 자신의 인가 세부사항을 가진 토큰을 통해 서버에 인증받고 서버는 유저의 토큰을 보고 권한이 있는지 판단한다.
인증 vs 인가
인증과 인가는 한 번에 쓰일 수도 있다. 예를 들어 회사에 출근하면 찍는 지문 인식기는 내가 누구인지도 인식하면서, 내가 회사 출입문을 통과할 수 있도록 회사 내부 접근을 인가하기도 한다. 즉, 인증과 인가는 어떤 시나리오에서는 서로 바꿔서 사용할 수 있는 주제이기도 하다. 그렇기 때문에 혼란을 야기한다.
하지만 중요한 점은 인증은 인가로 이어지지만 인가는 인증으로 이어지지는 않는다. 신원증명이 접근 권한을 승인하기에 충분하다고 해도, 즉 무언가를 얻는데 인가를 받을 수 있다고 해도 인가가 항상 개체를 식별하는데 사용할 수 있는게 아니다. 예를 들어 탑승권은 비행기를 타는 데 인가를 하는 역할도 하고 신원 데이터도 포함되어 있다. 하지만 공연 티켓같은 경우 신원 세부사항을 담고 있지는 않는다. 단지 공영장에 입장할 권리를 나타낼뿐.
요약
- 인증은 유저나 디바이스의 신원을 증명하는 행위입니다. (내가 누구인지 확인하는 행위)
- 인가는 유저나 디바이스에게 접근권한을 부여하거나 거부하는 행위입니다. (내가 권한이 있는지)
- 인증은 인가 의사결정의 한 요소가 될 수 있습니다.
- 인가 가공물(토큰)로 유저나 디바이스의 신원을 파악하는 방법은 유용하지 않습니다.
출처 : 아래의 사이트들을 보면서 큰 공부 하였습니다
https://jake-seo-dev.tistory.com/76
https://www.okta.com/kr/identity-101/authentication-vs-authorization/
https://auth0.com/intro-to-iam/authentication-vs-authorization/
https://velog.io/@aaronddy/인증Authentication과-인가Authorization
'Front-End > Web & 표준 & ETC' 카테고리의 다른 글
브라우저 렌더링의 원리 (1) | 2024.07.25 |
---|---|
[Web] 프론트엔드 성능 최적화 (0) | 2022.08.23 |
웹팩과 바벨 (Webpack vs Babel) 넌 또 누구냐!! (0) | 2022.07.05 |
모듈과 번들러 (Module Bundler) 넌 누구니?! (0) | 2022.07.05 |
[Web] SSR (서버사이드 렌더링) vs CSR (클라이언트 사이드 렌더링) (0) | 2022.03.15 |