지금까지 이 강의에서
우리는 인증에 대해 계속해서 이야기 해보았습니다
우리는 보안과 인증을 강화하여
인증된 사용자만이
웹 애플리케이션에 접근할 수 있도록
웹 애플리케이션을 안전하게 보호했습니다
이제 이 섹션에서
우리는 인가에 대해서도 살펴볼 것입니다
여러분은 인증과 인가의
차이점에 대해
의문을 가질 수도 있을 것 같습니다
저는 많은 프로젝트에서
개발자들과 테스터들이
이 인증과 인가의
차이점을 모른 채 사용하는 것을 볼 수 있었습니다
따라서 이 강의에서는
인증과 인가의 차이를 이해하는 것에
중점을 두려고 합니다
만약 여러분이 제게 인증의 정의에 대해 묻는다면
인증의 일환으로 우리는
웹 애플리케이션에 접근하려는 유저를 식별하고자 노력할 것입니다
인증이 없다면
우리는 어떠한 개인이나 엔드 유저도
안전한 API에 접근하도록 할 수 없습니다
반면에 인가는
인증이 성공적으로 완료된 이후에 등장합니다
인가의 일환으로 우리는
특정의 최종 사용자가 어떠한 권한, 특권
혹은 역할을 가지고 있는지 확인할 것입니다
따라서 우리는 우리의 웹 애플리케이션 안에
비즈니스 로직을 만듦으로써
사용자가 자신의 권한에 기반하여
웹 애플리케이션 내에서의 다양한 시나리오나 기능에
접근할 수 있게 합니다
은행 애플리케이션을 예로 들자면
다음과 같은 역할이 관련될 것입니다
점원, 캐셔 , 매니저, 감독관
따라서 많은 역할이 연결되어 있고 각 역할은
고유의 권한이나 특권을 가지고 있을 것입니다
따라서 그들의 권한에 따라 우리의 시스템 내에서
엔드 유저의 접근을 강제하는 것을
우리는 인가라고 합니다
이것이 바로 첫 번째 정의이자
인증과 인가의 기본적인 차이입니다
두 번째 차이는 인증
약어로는 AuthN으로 불리는 것은
항상 인가보다 먼저 등장합니다
반면에 인가는
약어로 AuthZ라 불리며
항상 인증 단계 이후에 실행됩니다
우리가 인증 없이 인가를 진행하는
시나리오는 절대 존재하지 않습니다
우리는 항상 먼저 엔드 유저에게 시스템에 로그인할 것을 물어봅니다
그 이후에서야 우리는 그의 권한과
접근 범위 및 역할에 대해 고려할 것입니다
이에 따라서 우리는 권한부 여를 강제할 수 있습니다
세 번째 차이점으로 와서
인증을 진행하기 위해서는
우리는 오직 유저 로그인 세부 정보만을 물어봅니다
이메일, 전화번호
그리고 여러분의 자격 증명이나 OTP는 무엇인지 물어봅니다
이 모든 세부 정보는
엔드 유저를 우리의 웹 애플리케이션에서 성공적으로 인증하기 위해
그들로부터 수집됩니다
반면에 인가에서는
우리는 사용자의 자격 증명에 대해 걱정할 필요가 없습니다
우리는 오직 그의 권한이나
특권 혹은 역할에 대해서만 신경 씁니다
이러한 권한, 역할, 특권만을 기준으로
우리는 웹 애플리케이션 내의 그의 접근 레벨을 결정합니다
다음 차이점으로 넘어가 봅시다
인증이 실패할 때마다
우리는 인증이 실패되었다는 의미인
에러 코드 401을 받게 됩니다
반면에 인가의 상황에서는
에러 코드 403이 뜹니다
따라서 언제든 우리가 403을 접한다면
인증은 성공적이나
이 유저는 접근할 권한이 없다는 것을 의미합니다
기능적으로
이것이 접근 금지 에러인 403이
인가가 실패될 때마다 뜨는 이유입니다
마지막으로 여러분이 제게
인증과 인가에 관한 실제 예시를 물어본다면
앞서 말한 대로 항상 은행 애플리케이션을 예시로 들 수 있습니다
은행 애플리케이션 내에서 우리는 다음과 같은 여러 가지 역할을 가질 수 있습니다
고객, 관리자, 캐셔, 은행 관리자, 감독관
모든 유저에게는 관련된 역할이 있습니다
우리는 먼저 우리 은행 애플리케이션 내에서
항상 유저의 신원을 확인하기 위하여 유저에게 자격 증명을 요청합니다
이것이 바로 은행 애플리케이션 내의
인증의 일부입니다
엔드 유저가 인증되고
우리의 애플리케이션에 로그인 되었다면
그의 역할, 특권 그리고 권한에 따라
그가 접근할 수 있는 기능과
웹 애플리케이션에서 볼 수 있는 페이지가
사용자 간에 다를 것입니다
여러분이 아직도 인증과 권한에 대해
헷갈린다면
실제 상황을 예시로 들 수 있습니다
하나의 상황을 가정해 봅시다
여러분이 뉴욕에서 런던으로 여행하기로 결정했습니다
뉴욕에서 런던으로 여행하기 위해서는
티켓을 예약하고 공항을 갈 겁니다
공항의 입구에서는
보안 담당자가 여러분에게 신원 증명을 요구할 것입니다
누구인가요?
이때 여러분은 여권을 보여주고
티켓 정보를 보여줄 겁니다
이 인증이 성공적으로 마무리되고 나면
여러분은 공항에 들어갈 수 있습니다
보안 담당자는
여러분이 공항 내에서 어디를 돌아 다닐지 걱정할 필요가 없습니다
그건 그의 역할이 아니기 때문입니다
그의 역할은 오직 여러분의 신원 정보에 따라
인증을 진행하는 것 뿐입니다
여러분이 공항에 들어간 이후에는
오직 뉴욕에서 런던으로 비행하는
비행기만 탑승할 수 있습니다
만약 여러분이 마지막 순간에
뉴욕에서 싱가포르로 여행하고 싶다고 마음을 바꾸었다면
이것은 불가능합니다
왜냐하면 여러분의 티켓 ID 정보에 의하면
여러분은 오직 뉴욕에서 런던으로 여행할 권한만을 부여 받았기 때문입니다
따라서 이러한 상황은 특정한 항공편으로 여행할 권한, 특권은 있지만
다른 항공편으로는 여행할 수 없는
권한이나 특권을 가지고 있는 것과 유사합니다
이것이 제가 생각할 수 있는 실제 예시 중 하나입니다
이제 여러분이 인증과 인가의
차이점을 확실히 이해하셨기를 바랍니다
앞선 모든 섹션에서
우리는 단순히 인증에 집중하고
인증이 성공적일 때마다
모든 엔드 유저에게 접근을 허용했습니다
그래서 사용자는 아무 페이지나 접근할 수 있었습니다
사용자는 우리의 웹 애플리케이션 내 어느 기능이나 확인이 가능했습니다
지금 이 섹션에서 우리는 이제
어떻게 우리의 웹 애플리케이션 내에서
인가를 구현하고 강제하는 지에 대해 집중합니다
이로써 다음 강의에서는 인가에 대한 여정에
뛰어들어 보겠습니다
감사합니다 수고하셨습니다