2017-03-10 11 views
0

배경 : 파일 서버를 만들고 있습니다. 내가 Nginx 역방향 프록시 뒤에 톰캣을 사용하고 있습니다. UI를 호스팅하는 메인 서버와 사용자가 업로드 한 파일을 저장하고 다시 서비스 할 수있는 많은 에지 서버가 있습니다. 개인 파일 저장소이므로 파일 업 로더 만 업로드 한 파일을 다운로드 할 수 있습니다.서버 간 사용자 요청 유효성 확인

문제점 : 세션을 생성하여 계정에 로그인 할 때 주 서버의 사용자를 인증하고 사용자의 추가 요청 (일반 사항)의 유효성을 검사하도록 사용자를 유지합니다. 이 정보는 에지 서버에 적합하지 않으며 에지 서버는 모든 요청에 ​​대해 파일을 제공합니다. 그건 내가 원하는 것이 아니야. 파일 소유자에게만 다운로드 권한을 부여하려고합니다.

이제 여기서는 가장자리와 주 서버가 세션이 분산 된 클러스터로 구성되는 Tomcat 클러스터링을 피하려고합니다. 사이트가 SSL을 지원합니다. 주 서버에 이미 로그인 한 (세션을 생성 한) 사용자로부터 파일 다운로드 요청이 에지 서버에 도달하면 사용자의 로그인 상태를 확인하는 방법이 있습니까?

+0

신뢰 경계는 어디에 있습니까? 메인에서 에지로의 사용자 요청은 단순히 userId를 포함 할 수 있으며, Edge는 파일을 다시 제공하기 전에 그것을 검증 할 수 있습니까? 아니면 주어진 사용자가 허용되지 않을 때 Unauthorized 401를 리턴 할 수 있습니까? 또는 서버 (관리자, 운영자, 직원 등)에 대한 액세스 권한이있는 사용자에 대해서도 가능한 한 사용자 파일을 안전하게 만들어야합니까? – diginoise

+0

중간에 있습니다. userId는 너무 약해서 어떤 사람은 그것을 추측 할 수 있습니다. 파일에 대한 관리자 액세스를 허용하지 않으려면 파일 소유자 만 알고있는 키를 사용하여 전체 파일을 암호화하고 클라이언트 브라우저에서 해독해야합니다.내가 원하는 것은 파일을 직접 사용하여 인터넷을 통해 파일을 다운로드하지 못하도록하는 것입니다 (소유자 이외). – printfmyname

+1

메인 서버의 개인 키로 암호화 된 세션 만료 시간이있는 쿠키. 에지 서버는 메인의 공개 키를 사용하여 쿠키를 해독합니다. – diginoise

답변

1

난 당신이

당신은 "주장 기반 인증"또는 리소스 액세스 토큰의 양식을 사용할 수 있습니다 사용할 수있는 몇 가지 방법을 참조하십시오.

청구 기반 인증 - 예 : JWT 토큰은 필요한 정보 (사용자 ID, 계정 ID, 권한 부여, 만료 등)를 포함하고 주 서버와 파일 서버 사이의 공유 암호 또는 주 서버의 개인 키로 서명됩니다.

이점은 에지 서버가 주 서버에 연결하지 않고도 해시 또는 서명을 기반으로 토큰의 유효성을 검사 할 수 있다는 점입니다. 단점은 사용자가 요청 된 리소스에 액세스 할 수 있는지 여부를 결정하는 논리가 있어야한다는 것입니다.

참조 : https://jwt.io/

자원 액세스 토큰 - 일부 클라우드 스토리지 제공 업체 사용되는이 방법 (AWS S3는 IBM이 ... 저장 객체 참조) - 주요 사이트는 몇 가지 추가 매개 변수와 함께 자원 URL을 반환합니다 - 예. 계정, nonce, 만료, 서명. 리소스 (에지) 서버는 만료 및 서명을 확인하고 리소스를 제공하거나 거부해야합니다.

이점은 에지 서버가 모든 인증을 신경 쓰지 않으며 인증 및 권한 부여가 주 서버의 범위 내에 있다는 것입니다. 단점은 제공된 리소스 URL의 만료 시간이 제한적이어야한다는 것입니다.

참조 : http://s3-expiry.50projects.com/

참고 :

  • 리소스 서버는 사용자가 SAML을 사용하는 것을 제외하고는, 로그인되어 있는지 확인 할 수없는 효과적으로 메인 서버와 통신 할 수 있다는 조건을 배치 SLO (단일 로그 아웃)가있는 SSO 또는 세션 관리가있는 OIDC
+0

JWT는 약속하고 자바 라이브러리도 가지고있다. 감사합니다. @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 있습니다 며칠 동안이 스레드를 열어두면 누군가가 더 나은 솔루션을 게시하는지 확인할 수 있습니다. Gabriel에게 감사드립니다. – printfmyname