403 Forbidden은 서버가 요청을 이해했지만 권한이 없어 처리를 거부한다는 뜻입니다. 401과 달리 신원 확인(인증)은 되었을 수 있으나, 그 신원에게 이 리소스에 대한 권한(인가)이 없는 상태이므로 다시 로그인해도 해결되지 않습니다.
역할·권한 부족, IP·지역·방화벽(WAF) 차단, 부족한 OAuth 스코프, 다른 사용자의 리소스 접근 시도 등이 대표적 원인입니다. 서버가 "당신이 누구인지는 알지만, 이 작업은 허용하지 않는다"고 말하는 셈입니다.
DELETE /api/orgs/9/members/17 HTTP/1.1
Host: api.example.com
Authorization: Bearer valid.token.for.viewerHTTP/1.1 403 Forbidden
Content-Type: application/json
{"error":"forbidden","message":"Your role 'viewer' cannot remove members"}app.delete('/api/orgs/:o/members/:m', (req, res) => {
if (req.user.role !== 'admin')
return res.status(403).json({ error: 'forbidden' });
// ...
});@app.delete('/orgs/<int:o>/members/<int:m>')
def remove(o, m):
if current_user.role != 'admin':
abort(403)
return '', 204