
이 Workloads OU 안의 한 AWS 계정을 그려놓은 거고,
그 계정 안에 IAM Permissions, Roles가 있어서
보라색 박스: VPC
그 안의 초록 박스들: Private subnet
즉, App Client도 Resource Server도 인터넷에 바로 노출되지 않은 내부망에서 돌아감.
Cognito랑 통신해서 토큰을 발급받고,
그 토큰을 들고 Resource Server한테 API 요청을 보내는 역할.
실제로는:
“실제 자원(API)”를 들고 있는 서버.
/account, /orders, /profile 같은 REST APIApp Client가 “Access Token”을 들고 와야만 응답해 주는 곳.
“나 사용자 로그인/인가 끝났으니까, 토큰 좀 주세요.”
App Client가 Cognito의 /oauth2/token 엔드포인트로 요청을 보냄.
보통 포함되는 것들:
grant_type (authorization_code, client_credentials 등)client_id, client_secretcode, redirect_uri 등예시
authorization_code 를 Cognito에 넘기면서“검증 끝! 이 사용자에 대한 Access Token 여기 있어.”
Cognito가 access_token (필요하면 id_token, refresh_token도) 을 App Client에게 돌려줍니다.
이 Access Token은 보통 JWT 형태고, 안에는:
“여기 내 출입증(access token) 있어, 이걸로 /resource 좀 보여줘.”
GET /api/orders HTTP/1.1
Host: resource.internal
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
Resource Server는 이 요청을 받으면:
Authorization: Bearer ... 헤더를 보고,“이 출입증 진짜야? 유효해? 권한 맞는 거야?”
Resource Server는 Cognito에 토큰 검증을 요청합니다.
확인하는 것들:
비유
리소스 서버는 “건물 안 사무실”,
Cognito는 “출입증 발급/검증 담당 보안실”이라고 보면,
사무실이 “이 출입증 진짜인지 보안실에 전화해서 확인하는 단계”가 ④.
“토큰 확인 완료, 요청한 데이터 여기 있어.”
토큰이 유효하고 권한도 맞으면,
토큰이 잘못됐으면:
401 Unauthorized 또는 403 Forbidden 으로 거절.예시 응답
HTTP/1.1 200 OK
Content-Type: application/json
{
"orders": [
{"id": 1, "status": "DELIVERED"},
{"id": 2, "status": "SHIPPING"}
]
}