REST (Spring MVC) 백엔드와 순수 JavaScript frontend가있는 Spring Boot 애플리케이션이있다. 최근 봄 보안을 통해 보안을 활성화했으며 사용자에게 어떤 특권이인지를 UI에 알려주는 방법, 즉 의 역할에 따라 사용자에게 어떤 컨트롤을 제공해야하는지에 대해 논의 중입니다. 내가 뭘하려 들어REST 애플리케이션의 UI에 대한 권한 끝점
:
우리는 단지 노출 및 권한 (역할)의 목록과 엔드 포인트와 함께 UI 거래를 할 수 있습니다. 백엔드에서는 간단하지만 백엔드에서는 ROLE -> Allowed URLs 매핑을 유지하고 프론트 엔드에서 동일하게 처리합니다. 어느 시점에서 이것들은 갈라 지겠지만 (나는 확신한다!) 사용 된 UI 컨트롤은
403 - Unauthorized
이 될 것이다. 즉 REST가 무엇 때문에는 URL의 중심을 확인 : 내가 신청 방법 y를 통해 URL의 X에 액세스 할 수 있습니까 : 질문에 대한 답 : 엔드 포인트 (
/security/privileges?url=...&method=...
을 말을)이 있나요? 이렇게하면 UI가 URL에만 초점을 맞출 수있게 해줍니다. 그러나/악몽처럼 백엔드 (불가능 보이는 특별히 당신은@Pre/@Post
주석을 통해 메소드 레벨의 보안 필터를 통해 웹 보안을 결합 할 때
질문 :.
내가 어떻게 모범 사례를 찾고 있어요를 REST 백엔드에서 UI로 사용자 권한을 전달하는 방법 URL 중심이거나 역할 목록 만 보내야합니까?
URL 중심 접근 방식을 사용하는 사람은 컨트롤러의 Metho 보안 검사를 통과 할 것인가? WebInvocationPrivilegeEvaluator은 메서드 수준의 보안을 고려하지 않으므로 충분하지 않습니다.
편집 : 역할의 목록을 보내와 접근 방식에 대한 나의 의심을 명확히합니다. 내가 할 경우 그 :
MVC 컨트롤러 :
@PreAuthorize("hasAnyRole('ADMIN', 'EDITOR'")
@RequestMapping("/editStuff")
public void editStuff(...) {
...
}
JS : 역할 EDITOR 또는 ADMIN 중 하나를 가지고위한
if (hasRole('ADMIN') || hasRole('EDITOR')) {
showEditControllWhichOnClickCalls('/editStuff');
}
분명이 중복 체크.
if (doIHaveAccessTo('/editStuff', 'POST')) {
showEditControllWhichOnClickCalls('/editStuff');
}
가 _ "이 URL 중심이 될하거나 역할의 목록을 보내해야"_ 역할 목록에 대답하려고합니다. URL은 충분하기위한 것입니다. _ "어느 시점에서 이들은 갈라질 것입니다"_ == _ "어느 시점에서 내 코드에는 버그가 포함될 것입니다."_ 이유는 자동 테스트가 있기 때문입니다. – zeroflagL
의견을 보내 주셔서 감사합니다. 두 곳에서 유지되어야하는 중복 된 코드는 나에게 버그와 동일하지 않습니다. 나는 역할 목록을 보내는 것에 대한 나의 의심에 대해 설명해 줄 것이다. –
다른 포인트 뷰를 제안합니다. 백엔드를 잊어 버리고 다른 사람이 제공 한 것이라고 상상해보십시오. 어떤 공개 API의 경우입니다. 클라이언트 앱에 보안을 어떻게 통합하고 싶습니까? Btw : 이제는 클라이언트 애플리케이션을 개발할 때 기존 역할을 포함시키지 못하는 것이 버그라는 것을 알 수 있기를 바랍니다. URL이 충분하지 않습니다. 미디어 유형 A에 대한 권리는 B가 아니라 읽을 수있는 권리가있을 수 있습니다. 그 모두는 UI에 영향을 미칩니다 ... – zeroflagL