나는 다음과 같은 REST 자원이 있습니다누락 된 리소스에 대한 사용 권한을 모델링하는 방법은 무엇입니까?
/companies
는/companies/{id}
반환 회사 상태/companies/{id}/departments
반환 회사의 모든 부서/employee/{id}/departments
반환 부서 직원 일 기업의 목록을 반환 in/departments/{id}
은 부서 상태를 반환합니다.
주목할 점은 부서가 관련 회사와 직원을 알고 있지만 URI에이 정보가 포함되어 있지 않다는 것입니다. 부서가 존재하지 않는다면 어떤 회사/직원과 관련이 있는지 (또는 자원이 전혀 존재하지 않았는지) 알 수있는 방법이 없습니다. 논증의 여지가 있기 때문에 부서 URI 스키마가 변경되지 않을 것이라고 가정해야합니다 (이것은 긴 이야기입니다).
/companies
리소스에는 관련 query
사용 권한 토큰이 있습니다. 클라이언트가 존재하지 않는 회사를 참조하면 /companies/{id}
나는 그들이 query
에 액세스 할 수 있는지 확인합니다. 그럴 경우 HTTP 404 ("Not Found")
을 반환하고 그렇지 않으면 반환합니다. HTTP 403 ("Forbidden")
지금까지는 그렇게 좋았습니다. 클라이언트가 존재하지 않는 /departments/{id}
리소스를 참조 할 때 문제가 발생합니다. 부서가 존재하지 않기 때문에 어떤 회사와 query
권한 토큰이 연관되어 있는지 파악할 수 없습니다.
우리가 고전 usability/security tradeoff에 돌아왔다 보인다
- 모두가 자원이 존재하는지 여부를 알 권리 (무엇이 잘못되었는지를 나타내는 명확한 오류 메시지를 반환) 또는 을 가지고 가정하여 사용성을 향상
- 리소스가 없거나 사용 권한이 거부 된 경우 막대한 오류 코드를 반환하여 보안을 향상시킵니다. 리소스가 있는지 또는 사용 권한이 정의되어 있는지 숨기기 위해 막연한 오류 메시지를 반환합니다.
다른 방법이 있습니까?