[모의기술면접] Section4
1. 인증과 인가의 차이에 대해 설명해 주세요.
인증은 영어로 Authentication 으로 사용자의 신원을 확인하는 것이다. 일반적으로 어떠한 인증 요소를 증거로 제시하여 자신을 인증합니다. 예를 들면 은행에서 돈을 인출하기 위해 은행원이 신분증을 요구할 수 있다. 마찬가지로 온라인에서도 로그인을 할 때 아이디/패스워드를 입력하거나 휴대폰에 전달된 메시지의 코드를 입력하는 등이 있다.
인가는 영어로 Authorization 으로 사용자가 어떤 리소스에 접근할 수 있는 지 또는 어떠한 동작을 수행할 수 있는 지 즉, 접근 권한을 얻는 일을 말한다. 예를 들면 공연장에 입장하기 위해 티켓을 구매하는 상황을 생각해보자. 공연장은 신원에는 관심이 없고 공연장에 입장할 권한이 있는 지만 관심이 있다. 온라인에서는 일반적으로 토큰을 이용하여 인가를 진행한다.
따라서 일반적으로 인증을 통해 사용자 신원을 확인하고 신원이 검증된 사용자에 대해 적절한 인가를 부여하는 방식으로 동작한다.
실생활에서 둘은 사실 혼용되기도 한다. 신원 확인을 위한 인증요소를 접근 권한 부여를 위한 인가요소로도 사용하는 경우가 많기 때문이다. 하지만 반대로 인가요소를 인증요소로 사용하는 경우는 없다.
2. HTTPS의 동작 방식을 설명해 주세요.
HTTPS 는 HTTP Secure socket layer 로써 HTTP 요청을 SSL 혹은 TLS라는 알고리즘을 이용해 HTTP 통신을 하는 과정에서 데이터를 암호화하여 전송하는 방법이다. 암호화 방법으로는 대칭키와 비대칭키 방식을 혼용한다. 여기서 대칭키 방식은 클라이언트와 서버가 공통의 비밀키를 공유하여 암호화/복호화 하는 방식이며, 비대칭키 방식은 클라이언트와 서버가 각각 공개키와 비밀키를 가지며 서로의 공개키로 암호화하여 전송하면 각자 비밀키로 복호화하는 방식이다. 비대칭키 방식은 비밀키가 노출 되는 경우가 없으므로 안전하지만, 복잡한 알고리즘으로 인해 컴퓨터에 부담을 줄 수 있다. 이를 해결하기 위해 HTTPS는 최초 통신 시도시에만 '대칭키값'을 비대칭키 방식으로 클라이언트로부터 받으면 연결이 성립되고 이후부터는 대칭키를 이용해 통신하게 된다.
그리고 두번째로 서버의 응답과 함께 전달된 인증서를 확인할 수 있다는 점이다. 인증서는 서버의 신원을 보증하여 가짜 서버가 아님을 보장한다. 인증서는 CA라는 공인 기관에서 발급해주는데 CA 역시 공개키와 비밀키를 가지고 있고, 비밀키로 암호화한 인증서를 발급하고 공개키로 복호화가 가능하면 보증이 가능한 방식이다.
3. OAuth 2.0의 워크플로우에 대해 설명해주세요.
OAuth는 인증을 중개해주는 역할로, 이미 사용자 정보를 가지고 있는 웹서비스 (google 등)에서 사용자 인증을 대신 해주고 접근 권한에 대한 토큰을 발급한 후 이를 이용해 서버에서 인증이 가능해진다. OAuth2 인증방식 중 가장 일반적인 Authorization Code Grant 방식에 대해 말씀드리자면, 권한 부여 승인을 위해 자체 생성한 Authorization Code를 전달하는 방식이다.
- Resource Owner(유저)는 Client(애플리케이션)에 소셜 로그인 버튼을 누르는 등의 서비스 요청을 보냅니다.
- Client는 Authorization Server에 Authorization Code를 요청합니다. 이 때 미리 생성한 Client ID, Redirect URI, 응답 타입을 함께 전송합니다.
- 로그인 팝업을 통해 Resource Owner는 로그인을 진행합니다.
- 로그인이 확인되면 Authorization Server는 Authorization Code를 Client에 전달합니다. (이전에 요청과 함께 전달한 Redirect URI로 Code를 전달합니다.)
- Client는 전달받은 Authorization Code를 이용해 액세스 토큰 발급을 요청합니다. 액세스 토큰을 발급할 땐 미리 생성한 Client Secret, Redirect URI, 권한 부여 방식, 액세스 토큰을 함께 전송합니다.
- 요청 정보를 확인한 후 Redirect URI로 액세스 토큰을 발급합니다.
- Client는 발급받은 액세스 토큰을 이용해 Resource Server에 자원을 요청합니다.
- 액세스 토큰을 확인한 후 요청 받은 자원을 전달합니다.