Open BEOKS opened 2 years ago
Zuul을 이용하면 pre-filter에서 토큰정보를 받아서 처리하는 것이 가능하다고 함 (https://eblo.tistory.com/69)
보통 API에 권한에 따라 요청을 처리해야할 때, 클라이언트, 게이트웨이, API서버 셋 중에서 권한을 처리하는데, 보통 API서버에서 처리하는게 일반적이라고 한다. 그러나 우리의 경우는 orthanc의 소스를 건드릴게 아니라면 게이트웨이에서 일반 사용자와 관리자의 권한을 처리해서 서버에 넘겨주는 방식이 가장 적절할 것 같음. 의견바람 (https://digitalbourgeois.tistory.com/entry/API-REST-API-%EB%B3%B4%EC%95%88) (https://dongwooklee96.github.io/post/2021/03/28/rest-api-%EB%B3%B4%EC%95%88-%EB%B0%8F-%EC%9D%B8%EA%B0%80-%EB%B0%A9%EC%8B%9D/)
게이트웨이에서 일반 사용자와 관리자의 권한을 처리해서 서버에 넘겨주는 방식이 가장 적절할 것 같음. 의견바람
나도 이게 가장 적절할 것 같음. Zuul 링크를 읽어보니 prefilter 기능을 사용하면 해결 할 수 있을 것 같다.
Code Reference : https://eblo.tistory.com/69#:~:text=%C2%A0-,%EC%83%98%ED%94%8C%20%EC%BD%94%EB%93%9C%C2%A0,-PreFilter.java
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
log.debug("Request Method : " + request.getMethod());
log.debug("Request URL : " + request.getRequestURL().toString());
String authorizationHeader = request.getHeader(HttpHeaders.AUTHORIZATION);
if (!validateToken(authorizationHeader)) {
ctx.setSendZuulResponse(false);
ctx.setResponseBody("API key not authorized");
ctx.getResponse().setHeader("Content-Type", "text/plain;charset=UTF-8");
ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
}
return null;
}
private boolean validateToken(String tokenHeader) {
// 여기에서 로그인 및 권한 정보를 가져와서 진행하면 될 듯
return true;
}
권한 정보를 가져오는 방식은 Oauth에 로그인 되어 있는지 유무, 또는 mongoDB에 사용자로 등록되어 있는지 확인하면 될 것 같다. 후자가 로그인 정보를 세세하게 검사(일반 사용자, admin, 데이터 관리자 등) 할 수 있을 것 같으므로 더 적절 할 듯
orthanc는 Dicom 파일을 저장하기 때문에, 현재 프로젝트에서 가장 높은 보안 레벨이 적용되어야 한다. 어떤 방법이 있을까?
Reference