세션 기반 인증과 토큰 기반 인증 / Authorization Code 활용 과정
세션 기반 인증과 토큰 기반 인증을 비교해서 설명해 주세요.
세션 기반 인증방식
그냥 세션 id만 주면 되고, 세션에 대한 모든 정보는 세션 DB에 저장되어 있다. 페이지를 요청하면 서버는 세션 ID를 DB에서 찾으면 된다.
세션마다 별도의 ID가 있어서 해당 세션 ID는 쿠키를 통해 브라우저로 돌아오고 저장된다. 따라서 같은 웹사이트의 다른 페이지로 이동하면, 브라우저는 세션 ID를 갖고 있는 쿠키를 자동으로 서버에게 보내게 된다.
서버는 로그인 된 유저의 모든 정보를 세션 DB에 저장하기 때문에 이 정보들을 이용하여 새로운 기능 추가 가능
- 원하지 않는 디바이스에서 가제 로그아웃을 할 수 있도록 하기
- OTT 서비스에서 계정 공유 숫자 제한 (현재 로그인 인원을 파악하기 쉬움)
- 일일이 DB에 유저 정보들을 담기 때문에 유저가 늘어나는 만큼 DB도 커져야 한다는 단점
토큰 기반 인증방식
서버가 유저를 인증하는 데에 필요한 정보를 토큰에 저장한다. 그리고 이 토큰을 우리에게 보내준다. 생성된 토큰이 유효한지만 살펴보기 때문에 페이지를 요청하면 서버는 DB를 건드릴 필요 없다.
- DB없이도 데이터 인증을 할 수 있고, 해당 데이터를 돌려받을 때 유효성을 검증할 수도 있다.
- QR 체크인(전자출입명부)
- JWT(JSON WEB TOKEN)방식을 사용할 때 Header와 payload가 암호화가 되지 않기 때문에 토큰을 탈취 당할 위험이 있기 때문에 보안에 민감한 중요한 내용은 넣지않는 것이 좋다.
Authorization Code를 활용하는 구글 소셜 로그인을 실행하기 까지
유저, 프론트엔드, 백엔드, OpenID Connect 프로바이더 사이에 어떤 과정을 거치는지 설명해 주세요.
구글 소셜 로그인에서 Authorization Code를 활용하여 로그인을 실행하는 과정은 다음과 같이 유저, 프론트엔드, 백엔드, OpenID Connect (OIDC) 프로바이더(구글) 간의 상호작용으로 이루어집니다.
OIDC는 OAuth(Open Authorization)에 덧붙혀 만든 프로토콜로 여러 서비스들 사이에 접근 권한을 위임(OAuth) + 인증을 하고 싶을 때 사용한다
우선 OpenId 프로바이더에서 해당 어플리케이션 고유의 Client ID와 Client Secret을 발급받고 백엔드에 저장하고,
스코프를 설정 (성, 이름, 프사, 생년월일) 설정한다
1. 유저가 로그인 버튼 클릭
유저가 웹 애플리케이션(프론트엔드)에서 구글 로그인 버튼을 클릭하면 프론트엔드가 이를 감지해 구글의 OIDC 인증 페이지(로그인 창)으로 리디렉션
2. 프론트엔드가 구글에 인증 요청
OIDC 프로바이더(구글)은 인증 페이지(로그인 창)을 표시하여 유저에게 로그인 및 권한 승인을 요청
3. 유저가 구글에서 로그인 및 권한 승인
유저는 구글 로그인 페이지에서 이메일과 비밀번호를 입력하고 로그인해 해당 어플리케이션이 요청한 권한을 승인
4. 구글이 Authorization Code 발급 및 리디렉션
OIDC 프로바이더(구글)은 유저가 인증 및 권한 승인을 완료하면, 프론트엔드에게 Authorization Code(유저 인증 확인서)를 리스폰스로 돌려준다
5. 프론트엔드가 Authorization Code 백엔드로 전달
프론트엔드는 리스폰스로 받은 Authorization Code를 간편 인증 처리 리퀘스트로 백엔드로 전달,
이 단계에서 백엔드는 Authorization Code를 이용해 토큰을 교환함.
6. 백엔드가 Authorization Code로 Access Token 및 ID Token 요청
백엔드는 구글 OIDC 프로바이더에게 Authorization Code와 미리 저장해뒀던 Client ID와 Client Secret을 간편인증 리퀘스트로 보냄
OIDC 프로바이더(구글)는 유효한 Authorization Code를 확인해 유저를, Client ID와 Client Secret을 통해 인증을 요청한 서비스가 어디인지 확인하고 해당 서비스 백엔드에 Access Token(접근 승인) 및 ID Token (유저 신원 파악)을 전달
7. 백엔드가 ID Token 검증 및 사용자 정보 확인
백엔드는 받은 ID Token을 검증하여 사용자 정보를 확인 (토큰의 서명 유효성, 발행자(issuer), 만료 시간(expiration) 등)
ID Token은 Base64로 인코딩된 JWT(JSON Web Token) 형식으로, 토큰을 디코딩하여 유저의 프로필 정보(예: 이메일, 이름)를 추출가능
요약
- 유저: 로그인 및 권한 승인.
- 프론트엔드: 구글로 인증 요청 및 Authorization Code 수신 후 백엔드로 전달.
- 백엔드: Authorization Code로 Access Token 및 ID Token 교환, 사용자 정보 검증 및 관리.
- OIDC 프로바이더(구글): 유저 인증, Authorization Code 발급, 토큰 발급.