본문 바로가기
Web

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

by DuncanKim 2022. 7. 31.
728x90

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

 

모태 미모 인증...?

 

 

인증과 인가는 일상생활 속에서도 많이들 듣는 개념이다.

 

인증은 본인인증, 성인인증 등의 용어에서 많이 보았을 것이다. 내가 '누구인지'를 확인하는 절차를 뜻하는 것으로 일상에서도 사용된다. 한편, 인가의 경우, 법률용어로 활용이 되기도 하는데, '학교 설립 인가', '국토교통부 장관 인가' 등 행정법 상의 용어로 많이 활용된다. 정확히 이야기하면, 행정기관이 어떤 사람이 하려는 행위를 OKay 해주어서 법적으로 효력이 있게 만들어주는 절차라는 뜻을 가진다.

 

어감에서도 드러나듯, 인증과 인가는 어떤 프로그램을 설계하는데 필요한 것이 아니라, 누군가와 소통을 하는데 있어서 필요한 '확인 절차'에 쓰이는 개념이라고 할 수 있다. http를 활용해서 클라이언트와 서버가 소통하는 것에 있어서 '보안'적인 측면을 조금 더 강화하기 위해 있는 기술들이라고 생각하고 개념에 접근하면 좋겠다.

 

 

웹 기술에 있어서 인증과 인가는 컴퓨터 자원(텍스트, 이미지...)을 적절한/유효한 사용자에게 전달/공개하기 위한 방법이라고 생각하면 된다. API에서 가장 자주 구현되는 기능 중에 하나이다.

 

 

1. 인증(Authentication)

 

 

1) 인증의 정의

식별가능한 정보로 서비스에 등록된 유저의 신원을 입증하는 과정

 

우리가 어떤 프로그램에 접속하려 할 때, 아이디와 패스워드를 입력하거나, 스마트폰으로 오는 인증번호를 적어서 제출하는 과정이 '인증'과정이다. 어떤 인증 요소(아이디/패스워드, 인증번호 등)를 증거로 제시해서 내가 서비스에 등록된 유저인지를 판별하는 과정이라고 보면 될 것이다. 인증요소는 하나 일 수도 있고, 두 개 이상일 수도 있다.

 

 

2) 인증 과정의 예시

 

회원가입 과정

1. 아이디, 비밀번호를 생성한다.

2. 비밀번호를 암호화하여 DB(데이터베이스)에 저장한다.


로그인 과정

1. 등록된 아이디와 비밀번호를 입력한다.

2. 암호화되어 DB에 저장된 사용자의 비밀번호가 서로 일치하는지 비교한다.
    2-A. 일치하면 로그인한다.
    2-B. 일치하지 않을 시, 로그인에 실패한다.

3. 로그인에 성공하면, Access Token을 클라이언트에 전송한다.

4. 최초 로그인 성공 후, 다음부터는 Access Token을 첨부하여 서버에 요청을 전송함으로써 매번 로그인하는 과정을 생략할 수 있다. 

 

 

2. 인가(Authorization)

 

1) 인가의 정의

 

인증된 사용자에 대한 자원 접근 권한 확인(글의 수정 권한 등)

 

어떤 인증된 개체가 어떤 리소스에 접근을 할 수 있는지 검증을 하는 것이다. 예를 들어, 우리는 구글 드라이브를 활용해서 사진을 저장하곤 한다. 구글 드라이브에 사적인 사진은 '나'만 볼 수 있어야 한다. 다른 구글 드라이브를 사용하는 유저라도, 내 사진에 대한 접근 권한은 나만 가지고 있고, 나만 접근할 수 있는 것, 다른 사람이 접근하려고 하면, 다음 동작(사진 확인, 추가 등)을 할 수 없게 하는 것이 인가의 과정이라고 보면 된다.

 

 

2) 인가 절차의 예시

 

1. 인증 절차를 통해, Access Token을 생성한다. 이 토큰은 사용자의 정보를 담은 상태이다. (ex. 사용자 아이디 값)

2. 사용자가 요청을 보낼때, Access Token을 첨부하여 보낸다.

3. 서버는 해당 Access Token을 복호화하고, 정보를 얻는다. (Access Token에 담긴 정보)

4. 얻은 정보를 사용하여, DB에서 사용자 권한을 확인한다.

5-A. 사용자의 권한이 확인되면, 해당 요청을 처리하도록 한다.
5-B. 권한이 없다면, 에러코드를 출력한다. 일반적으로 Unauthorized Response(401) 에러코드를 출력한다.

 

 

3. JWT(JSON Web Token)

 

JSON 포맷을 이용하여 사용자에 대한 속성을 저장하는 클레임 기반의 웹 토큰이다. 클라이언트가 아이디 패스워드를 통해 인증을 하면, 서버에서 서명된 JWT를 생성하여 클라이언트에게 응답으로 돌려준다. 클라이언트가 서버에 데이터를 추가적으로 요구할 때, JWT를 http header에 첨부를 하고, 서버에서 클라이언트로부터 온 JWT를 검증한다.

 

이와 같은 과정을 통해 무상태 환경에서 사용자 데이터를 주고 받을 수 있게 된다. 세션을 사용하게 될 경우, 쿠키를 통해 식별하고 서버에 세션을 저장했지만, 토큰 방식으로 인가를 처리하면 클라이언트에 토큰을 저장하고 요청시 http header에 토큰을 첨부하는 것만으로 단순하게 데이터를 요청하고 응답을 받아올 수 있다.

 

인증과 인가 과정 사이에 이러한 보안 기술을 활용해서 조금 더 편안한 접속 과정과 안전한 정보 교환 환경을 제공받을 수 있는 것이다.

 

 

4. 마치며

 

인증과 인가에 대한 기본 개념 정도를 알아보는 것에 그쳤다. 세부적으로 토큰 내부에 어떤 내용이 적히는 지, 어떤 식으로 암호화가 되는 지에 대해서는 전반적인 웹 기술에 대한 이해도를 높인 후에 더 깊게 파고 들어볼 예정이다.

 

728x90

'Web' 카테고리의 다른 글

[Spring] Framework, Library, API  (0) 2022.08.02
[Web] OSI 7 Layer  (0) 2022.08.01
[Spring] Servlet Container  (0) 2022.07.29
[Spring] Servlet과 Spring  (0) 2022.07.27
[Java] 내부 클래스와 익명 클래스 그리고 람다  (0) 2022.07.26

댓글