이름이 비슷해서 같은 뜻같아 보이지만 까고보면 전혀다른 개념인 인증 인가!
간단한 개념부터 실제 개념과 디테일을 짚어보아요
간단하게 짚고 가면,
인증 = 로그인 과정, 인가 = 사이트 사용 과정
인데,
예를들어 지금 이 글이 써져있는 벨로그라는 사이트에 "로그인" 을 해야하죠?
저는 깃허브를 통해 SSO로 로그인하고있는데, 아무튼 이 로그인 과정이 "인증" 이에요.
근데, 이 글을 보고있는 여러분이 이 글을 "수정" 해도 될까요? 여러분 계정으로 로그인하더라도 제 글은
수정되면 안돼요. 물론 여러분이 벨로그 관리자여서, 글 수정 권한이 존재한다면 가능하겠죠! 이런 권한을 부여하는 행위를 "인가" 라고 해요
선택한 팩터를 가지고 "사용자" = "나" 임을 증명 (이를 자격증명 이라고 함)하면 엑세스를 허용해주는 과정을 "인증" 이라고 해요.
저번 게시글 SSO? IdP? MFA? OTP? 전반은 이 인증 절차에 필요한 개념들이에요. 간단하게 인증과 엮어서 정리해드리자면,
다음 회차에 나오겠지만, 이런 "인증"에 사용되는 매개체가 "ID토큰" 이에요.
일반적으로 인증 팩터들은 "사용자가 변경이 가능한" 값들이기에 (비밀번호든, OTP든..) 인증은 실제 개별 사용자가 "관리"할 수 있는 개념이에요.
위의 인증 과정 덕분에 "사용자" = "나" 임은 증명했는데, "내"가 "그 행위"를 해도 되는지 "권한을 부여하는 행위" 가 필요해요. 이를 "인가"라고 해요.
역시 다음 회차에 나오겠지만, 이런 "인가"에 사용되는 매개체가 "엑세스토큰" 이에요.
일반적으로 인가는 개별 사용자가 관리할 수 없어요. 대부분 관리자가 직접 권한을 부여해줘야해요. 물론 관리자가 "권한을 관리할 수 있는 권한" 같은걸 사용자에게 제공해줬다면, 개별 사용자도 자기 권한을 제어할 수 있겠죠.
대표적으로 위의 인증/인가를 관리하는 체계를 IAM(Identity and Access Management) 라고 해요. AWS 리소스에도 있죠? AWS IAM 이 실제 리소스 예시에요. IAM에서 Identity 부분이 위의 인증을 관리하는거고, Access 부분이 지금 이 인가를 관리하는거에요.
다뤄보신분들은 아시겠지만,
우선 IAM에서 계정을 생성할 수 있어요. 그 생성된 계정은 "인증" 절차에 사용됩니다.
IAM에서 생성된 계정에 권한을 부여할 수 있어요. 그 권한을 부여하는 과정이 "인가" 에요.