내용 출처 : 개발자 유미(유튜브)
자료 출처 : https://www.devyummi.com/page?id=66934f448a005e7d8f32213a
OAuth2 Code Grant 방식의 동작 순서
- 로그인 페이지
- 성공 후 코드 발급 (redirect_url)
- 코드를 통해 Access 토큰 요청
- Access 토큰 발급 완료
- Access 토큰을 통해 유저 정보 요청
- 유저 정보 획득 완료
- 1. 로그인 페이지
- 사용자가 서비스에 접근하면 로그인 페이지로 리다이렉트됩니다. 이 페이지는 보통 OAuth 제공자(예: Google, Facebook 등)가 호스팅합니다.
- 2. 성공 후 코드 발급 (redirect_url)
- 사용자가 성공적으로 로그인하면, OAuth 제공자는 미리 지정된 redirect_url로 사용자를 리다이렉트시킵니다. 이 URL에는 임시 인증 코드가 포함되어 있습니다.
- 3. 코드를 통해 Access 토큰 요청
- 애플리케이션 서버는 이 임시 코드를 받아 OAuth 제공자의 토큰 엔드포인트로 요청을 보냅니다. 이 요청에는 클라이언트 ID, 클라이언트 시크릿, 인증 코드가 포함됩니다.
- 4. Access 토큰 발급 완료
- OAuth 제공자는 요청을 검증하고, 유효한 경우 액세스 토큰을 발급합니다. 이 토큰은 사용자 정보에 접근할 수 있는 권한을 나타냅니다.
- 5. Access 토큰을 통해 유저 정보 요청
- 애플리케이션 서버는 발급받은 액세스 토큰을 사용하여 OAuth 제공자의 API에 사용자 정보를 요청합니다.
- 6. 유저 정보 획득 완료
- OAuth 제공자는 토큰을 검증하고, 요청된 사용자 정보를 반환합니다.
JWT 방식에서 OAuth2 클라이언트 구성할 때
1. 프론트엔드에서만 구현 vs 2. 프론트와 백 같이 책임을 분배에서 구현 vs 3. 백엔드에서만 구현
1. 프론트엔드에서만 구현:
장점:
구현이 간단하고 빠름
서버 부하 감소
단점:
보안 취약성 증가 (클라이언트 시크릿 노출 위험)
토큰 관리의 어려움
리프레시 토큰 사용의 제한
2. 프론트엔드와 백엔드 책임 분배:
장점:
보안성 향상
클라이언트와 서버의 역할 분리로 인한 유지보수성 개선
토큰 관리의 효율성
단점:
액세스 토큰 전송으로 보안
구현 복잡도 증가
프론트엔드와 백엔드 간 통신 오버헤드
3. 백엔드에서 구현:
장점:
최고 수준의 보안성
클라이언트 시크릿의 안전한 보관
토큰 관리의 중앙화
리프레시 토큰 사용 용이
단점:
서버 부하 증가
구현 복잡도가 높음
권장 방식:
보안과 확장성을 고려할 때, 백엔드에서 구현하는 방식(3번)을 가장 권장합니다. 이 방식의 주요 이점은 다음과 같습니다:
- 보안 강화: 클라이언트 시크릿과 토큰을 서버에서 안전하게 관리할 수 있습니다.
- 토큰 관리: 액세스 토큰과 리프레시 토큰을 효과적으로 관리할 수 있습니다.
구현 절차:
백엔드에서 OAuth2 클라이언트를 구성합니다.
프론트엔드에서 로그인 요청을 백엔드로 보냅니다.
백엔드는 OAuth2 제공자의 인증 URL로 리다이렉트합니다.
사용자 인증 후, 백엔드가 콜백을 받아 처리합니다.
백엔드에서 액세스 토큰을 얻고 JWT를 생성하여 프론트엔드로 전송합니다.
프론트엔드는 이 JWT를 사용하여 백엔드 API와 통신합니다.
'JAVA > Spring OAuth2 Client JWT' 카테고리의 다른 글
Spring OAuth2 소셜 로그인 구현 원리 (1) | 2024.07.22 |
---|---|
Spring OAuth2 변수 설정 (0) | 2024.07.19 |