2014-09-03 1 views
1

나는 다음과 같은 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에 돌아왔다 보인다

  • 모두가 자원이 존재하는지 여부를 알 권리 (무엇이 잘못되었는지를 나타내는 명확한 오류 메시지를 반환) 또는
  • 을 가지고 가정하여 사용성을 향상
  • 리소스가 없거나 사용 권한이 거부 된 경우 막대한 오류 코드를 반환하여 보안을 향상시킵니다. 리소스가 있는지 또는 사용 권한이 정의되어 있는지 숨기기 위해 막연한 오류 메시지를 반환합니다.

다른 방법이 있습니까?

답변

0

나는 query 권한을 삭제했습니다. 주소를 알고 있으면 누구나 리소스를 찾을 수 있습니다. 의미, 나는 권한이없는 사용자가 자원의 존재 여부를 알아 내지 못하도록 막으려하지 않습니다.

관련 문제