프로젝트를 진행하면서 빠질 수 없는 것이 있다면 바로 Authentication(Authn, 인증)
과 Authorization(Authz, 인가)
이다.
물론, 서비스에 따라 인증 인가가 필요가 없는 경우도 있지만 데이터를 제어하기 위해서는 어느 시점에서는 반드시 필요할 것이라는 생각이 든다.
인증은 누군가 또는 시스템이 실제로 그 누구인지 또는 시스템인지를 결정하는 과정입니다. 인증 기술은 사용자의 자격 증명 정보가 데이터 인증 서버의 자격 증명 정보와 일치하는지 확인하여 인증 절차를 통과한 시스템에 대해 액세스 제어를 제공합니다.
프로그래밍을 제외한 실생활에 빛대어 설명하자면, 기존에 전당포에 맡긴 물건을 찾기 위해서 전당포 주인은 손님에게 본인임 증명 할 수 있는 신분증을 포함한 자격 증명 자료를 요청 할 것이고 이것을 전달 받은 주인은 기존에 자신이 가지고 있던 기록과 대조한 후 일치하면 해당 물건을 돌려 줄 것이다.
=> 쉽게 말해, 사용자의 신원을 검증하는 단계!
프로그래밍 상에서 인증에 사용되는 요소들은 다음과 같다.
인증 방식은 보안과 관련된 부분이기 때문에 중요한 자료를 저장하는 서비스의 경우 다중 요소 인증 방식을 통해 여러 개를 결합해서 쓰기도 한다.
특정 리소스에 접근 할 수 있는 권한을 부여하는 과정
쉽게 말해, 주민등록증을 소지하고 만 19세가 넘은 청년들에게는 술과 담배를 살 수 있는 권한을 줄 수 있다.
인증이 된 사용자들에게만 인가 절차가 진행이 되는데 인가가 완료되면 그 사람의 권한을 알 수 있는 특정 리소스가 주어지는데 인가 절차에 따라 달라진다.
인가 절차에는 다양한 방식이 존재하는데 간단하게 알아보자
API keys
JWT / JSON Web Token
OAuth