OAuth2
OAuth 2.0은 비밀번호를 넘기지 않고도 "권한"을 위임하는 표준 프로토콜 입니다- 토큰 기반의 인증 및 권한 부여
- OAuth2 는 네 가지 역할을 정의합니다
- Resource Owner : 사용자 (권한의 주인)
- Client : 권한을 쓰려는 앱(앱/모바일/서버)
- Authorization Server : 인증 서버, 로그인/동의 처리하고 토큰 발급 (예: Google Auth)
- Resource Server: 리소스 서버, 실제 API (예: Google Driver API)
- Access Token 을 얻는 방식 또한 여러가지가 존재한다 → 누가 엑세스 토큰을 발급하는가
- Authorization Code Grant, Implicit Grant, ...
JWT (Json Web Token)
- 서버가 발급한 사실을 검증할 수 있게 서명(또는 암호화)이 붙은 토큰 포맷
header.payload.signature(Base64url) 형태 → 헤더.페이로드.서명- Header : 알고리즘/타입 (예:
{ "alg": "RS256", "typ": "JWT" }) - Payload(Claims) : 토큰 내용(사용자/권한/만료 등)
- Signature : 위 두 개를 비밀키(HS256) 나 개인키(RS256/ES256) 로 서명 → 위조,변조 방지
- Header : 알고리즘/타입 (예:
- 만약 RBAC 을 처리한다고 했을때 정확히 Role 기반으로 무언가를 수행한다고 가정하자
- 이럴경우 Token Payload 를 통해서도 Role 을 가져올 수 있지만 이는 문제가 있다
- 토큰을 발급하고 해당 토큰을 통해 요청할 때 그 시간내에 Role 이 변경되었다면 실제 주어진 Role 과 맞지않는 작업을 수행할 수도 있다
- 이를 방지하기 위해 Role 에 따른 작업이 정말 중요한 그리고 정확히 수행되어야 한다면 Token 을 통해 Role 을 가져오는 것이 아닌 실제 데이터를 가져와서 비교하는 것을 권장한다

Gateway 에서 인증/인가 처리 테스트
구조

- Auth 서버를 추가 및 Eureka 에 인스턴스 등록
- Auth 서버를 직접 Client 가 요청하지 않고 대신 Gateway 가 수행하도록함
테스트 코드
'학습일지' 카테고리의 다른 글
| [Spring] IoC, DI, Autowired (0) | 2025.09.15 |
|---|