[Security] 인증(Authentication)과 인가(Authorization)

jiveloper·2023년 2월 12일
0

Security

목록 보기
1/3
post-thumbnail

안녕하세요~~ 오늘은 인증과 인가에 대해 알아보려고 합니다!! 😲😲
인가보다는 인증이라는 말이 더 익숙하시고 자주 들어보셨을거라고 생각이 드는데요~
오늘은 이 두 가지의 단어가 무엇이며 언제 쓰이는지 알아보겠습니다!

0. HTTP의 특성

HTTP에 대해서 알고 계시나요?

처음 HTTP가 등장할 때에는 단순히 HTML 문서만을 주고 받는 것을 목적으로, 최대한 단순하게 설계되었습니다.

1. 비상태성 (Stateless)

HTTP는 문서만 주고 받을 뿐, 요청과 응답을 교환하는 동안 상태(Status)를 저장하지 않습니다. 이러한 특성을 HTTP의 비상태성이라고 합니다.

2. 비연결성 (Connectionless)

HTTP는 요청과 응답을 한번 주고받으면 바로 연결을 끊어버리는 특성을 가지고 있습니다. 그리고, 다음 요청을 하기 위해 다시 연결을 맺어야합니다. 이러한 특성을 HTTP의 비연결성이라고 합니다.

3. 예시

둘 다 조금 어려운 말일지도...? 쉽게 예시를 들어보겠습니다...🤩
사용자가 쇼핑몰 사이트에 접속하여 아이쇼핑을 하고 있다고 해봅시다. 위의 말에 의하면 사용자는 쇼핑몰 사이트의 로그인 페이지에서 로그인을 한 후에, 맘에 드는 상품 상세 페이지에 들어가서 구경 할 때 로그인이 풀려있다는 말이겠습니다.

  1. 사용자가 로그인
    => 서버에 로그인 값 요청
  2. 맘에 드는 상품 상세 페이지에 들어가서 구경 할 때 로그인이 풀려있다
    => HTTP는 상태값 저장을 안 하기 때문에, 로그인 페이지 -> 상세 페이지로 이동했을 때는 어떤 사용자가 로그인을 했는지, 아니 로그인 자체를 했는지 알 수가 없다.

페이지를 이동할 때마다 사용자 정보를 잃는다는 소리 아닌가? 그런데 우리는 웹을 사용하면서 한번도 이런 경험을 해본 적이 없습니다.


그렇다면 이런 HTTP 환경에서는 어떻게 매번 로그인을 하지 않아도 로그인 상태를 유지할 수 있는 것일까요? 웹 어플리케이션에서는 이 문제를 사용자에게 인증과 인가의 절차를 거쳐 해결하기 때문입니다.

인증과 인가, 얘네는 무엇이고 이 둘은 무슨 차이가 있는걸까요? 🤔


1. 인증

💡 이 사용자는 누구지? 확인해볼게~

인증이란 쉽게 말해서 로그인입니다. 로그인 액션을 취해서 유저가 누구인지 확인하고, 클라이언트가 자기 자신이라고 주장하고 있는 사용자가 맞는지를 검증하는 과정입니다.


예를들어, 클라이언트에서 로그인을 서버에 요청하면, 발생할 수 있는 경우는 다음과 같습니다.
  1. 로그인 성공 -> 인증된 사용자 (인가 가능)
  2. 로그인 실패 -> 인증되지 않은 사용자 (인가 불가능)

로그인에 성공하면 인가 가능하고, 실패하면 인가 불가능하다고? 인가는 인증된 사용자만 받을 수 있는 어떠한 것 같은데, 이게 대체 무엇일까요?



2. 인가

💡 너 우리 서비스 회원이네~ 그럼 네 게시글 작성, 수정 및 삭제 가능해!

인가는 인증 작업 이후에 행해지는 작업으로, 인증된 사용자에 대한 자원 접근 확인 절차를 의미합니다.


예를 들어, 우리가 흔히 쓰는 SNS인 인xx그램에 로그인했다고 칩시다. 인xx그램에서는 로그인을 했으면 내 게시글을 작성할 수 있고, 수정 및 삭제도 가능합니다.

이것은 게시글 작성, 수정 및 삭제 등 일반적인 작업에 대한 권한이 부여되어 있기 때문입니다. 이렇게 권한 여부를 확인하는 절차를 인가라고 합니다.


하지만, 내 게시글에만 자유롭게 접근 가능할 뿐, 타인의 게시글에는 작성, 수정 및 삭제가 불가능합니다. 이것은 타인의 리소스에 대해서는 인가되어 있지 않기 때문입니다.



3. 인증과 인가 요약

💡 인증과 인가는 시스템의 자원을 적절하고 유효한 사용자에게 전달하고 공개하는 방법이다.

  1. 인증: 내가 누구인지 확인하는 행위
  2. 인가: 내가 권한이 있는지 확인하는 행위




다음 내용

유저가 로그인을 시도하여 인증되었다면, 서버에서 클라이언트로 인증 확인의 표시로 세션이나 토큰을 발급/전달해줍니다.

다음 게시글에서는 인증 및 인가와 관련된 기술인 세션 인증 방식토큰 인증 방식에 대해 알아보겠습니다!!! 😖




참고

https://jake-seo-dev.tistory.com/76

https://hudi.blog/session-based-auth-vs-token-based-auth/

https://velog.io/@arthur/%EC%84%B8%EC%85%98-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D-vs-%ED%86%A0%ED%81%B0-%EC%9D%B8%EC%A6%9D-%EB%B0%A9%EC%8B%9D

profile
👩🏻‍💻 Clean Code와 Refactoring에 관심이 많은 개발자 입니다.

0개의 댓글