[기술면접] 프로젝트 : 예상 질문과 답변(OAuth2, JWT, Bearer)

Alice·2023년 9월 21일
0


프로젝트에서 카카오 소셜로그인을 구현하셨다고 기재하셨는데, 어떤 방식으로 구현하셨죠?

Oauth2 기반 사용자 인증과 Bearer 타입JWT를 사용하여 소셜로그인을 구현하였습니다.


OAuth2 에 대해서 설명해주세요.

Oauth2는 인증을 위한 개방형 표준 프로토콜입니다. Oauth2 방식은 카카오 등의 리소스 서버에서 제공하는 사용자 신원에 대한 접근 권한을 서비스에 위임하는 방식을 제공합니다.


OAuth2 를 사용하는 경우 어떤 장점이 있죠?

서비스 입장에서 제 3자인 리소스 서버를 통해 리소스 주인의 신원을 확인할 수 있다는 장점이 있습니다. 여기서 제 3자 리소스 서버는 신뢰할 수 있는 서버여야합니다. 프로젝트에서 구현하였던 카카오 서버가 이에 해당됩니다. 신뢰할 수 있는 리소스 서버는 Access Token을 발급하여 사용자의 식별자로 활용할 수 있게 해줍니다.


OAuth2 를 사용한 사용자 인증과정을 한번 순서대로 설명해보세요.

보편적으로 클라이언트란 서비스를 사용하는 사용자를 의미하지만, Oauth2 프로토콜을 사용한 인증 과정에서는 리소스 서버를 사용하는 프로그램 즉, 서비스 자체가 클라이언트의 역할을 하게됩니다.


1. 클라이언트를 리소스 서버에 등록하는 과정이 첫번째입니다.

클라이언트와 리소스 서버는 클라이언트 ID, 클라이언트 시크릿, 리다이렉트 주소등을 공유합니다. 여기서 클라이언트 ID 는 클라이언트의 식별자, 클라이언트 시크릿은 식별자를 위한 비밀키, 리다이렉트 주소는 인증 완료 후 클라이언트 페이지로 넘어갈 URL 입니다.


2. 서비스 사용자가 클라이언트에 로그인을 시도합니다.

로그인 정보는 리소스 서버로 전달됩니다. 리소스 서버가 사용자 신원을 확인할 경우 사용자에게 권한 인가 코드를 넘겨줍니다.


3. 사용자는 리소스 서버로부터 받은 권한 인가 코드를 클라이언트에게 넘깁니다.

클라이언트는 인가코드, 클라이언트 ID, 클라이언트 시크릿, 리다이렉트 주소를 리소스 서버로 전송합니다.


4. 리소스 서버는 클라이언트로부터 전송받은 값과 자신이 가지고있는 값을 대조합니다.

문제가 없는 경우 리소스 서버는 클라이언트에게 Access Token을 전달합니다. 클라이언트는 Access Token 을 기억하고 리소스 서버로의 요청이 필요한 경우 Access Token을 리소스 서버에 전달합니다. 리소스 서버는 Access Token 을 확인하여 매칭되는 사용자 정보를 찾아 클라이언트로 전송할 수 있습니다. Access Token 이 만료되면, Refresh Token 을 통해 Access Token을 재발급 받을 수 있습니다.


5. 인증이 확인되면 클라이언트는 JWT를 생성하여 사용자에게 발급합니다.

JWT 에도 Access Token과 Refresh Token이 존재합니다. 사용자는 API를 요청할 때 Access Token으로 접근하여 정보를 얻을 수 있습니다. Access Token이 만료되면 Refresh Token으로 Access Token을 재발급 받을 수 있습니다. 만일 둘 다 만료되었다면 로그인을 다시해야합니다.


아까 Bearer 타입의 JWT를 사용하셨다고 하셨는데, Bearer 인증 방식이 어떤것인가요?

Bearer 타입 인증이란 Oauth2 에서 지원하는 토큰 기반 인증방식입니다. Bearer과 Access토큰을 Authorization 헤더에 입력하는 인증방식입니다. Oauth2 인증방식에서는 SSL/TLS를 필수로 사용하기 때문에 Bearer 토큰을 쉽게 복호화할 수 없습니다. 또한 토큰에 유효기간을 부여하는 방식으로 안정성을 보장할 수 있습니다.

profile
꾸준한 습관으로 만드는 내면의 견고함

0개의 댓글