Replies: 4 comments 1 reply
-
토큰에 권한 정보를 같이 넣어서 발행하고 특정 api요청시에 be에서 권한을 확인하자현재는 토큰에 memberId값만 전달하고 있는데요! 지금은 @member 어노테이션을 통하여 로그인 한 유저인지만 판단하고 있지만 물론 @Admin에서는 토큰 검사시에 어드민인지 확인하는 식으로요! 프론트에서 검사하는 방식브라우저에서 접속하는 유저가 아니라 curl과 같은 요청으로 be에게 날린다면 따라서 관리자 관련 정보 요청 시 be에서 아예 막아서 정보를 전달하지 않아야 한다고 생각합니다. |
Beta Was this translation helpful? Give feedback.
-
관련 코드 첨부@Member 어노테이션이 있을 때 AOP를 통해서 토큰에서 memberId를 추출하는 코드 이와 유사하게 @Admin 어노테이션을 AOP를 적용해서 권한을 검사하면 될 것 같습니다. |
Beta Was this translation helpful? Give feedback.
-
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
EEOS 3.0
EEOS 3.0에서 관리자 기능이 추가됨에 따라서, 관리자 페이지가 새로 생겼습니다.
또한 고정 사용자인 관리자 또한 생겼습니다.
-> 관리자 페이지, 관리자 계정 추가 (로그인 기능 포함)
문제 상황
관리자 로그인 기능에서, 토큰을 생성할 때 일반 사용자와 똑같은 구조로 토큰을 생성하여 보내고 있습니다.
또한, DB에 관리자 계정이 없을 경우 BE 서버 실행 시 자동으로 관리자 계정이 생성되도록 하고 있습니다. (관리자 ID와 PW는 정적)
이때 문제가 발생합니다. 프론트 페이지에서는 로그인 성공시 메인 화면으로 넘어가는데 이때 메인 화면 이동 조건이 로컬 스토리지에 저장된 토큰의 유무입니다.
만약 일반 사용자가 사용자 페이지에서 로그인에 성공한 후, 브라우저의 주소창에 관리자 페이지의 주소를 입력하면 접속이 되는 것입니다.
일반 사용자가 관리자 페이지에 접속하는 것은 문제인가?
저는 문제라고 생각합니다. 일반 사용자와 관리자는 엄연히 권한을 다르게 부여받은 사용자입니다.
따라서 각각의 권한에 맞게 볼 수 있는 정보의 범위가 정해져 있습니다.
하지만 현 상황에서는 일반 사용자가 사용자 페이지에서 로그인에 성공한 후 관리자 페이지에 접속하면 메인 페이지 , 회원 관리 페이지 , 행사 생성 페이지 등 많은 페이지에 접근할 수 있는 상황입니다.
(행사 생성, 수정, 삭제 및 회원 관리 변경에 관한 동작은 서버 내부적으로 관리자일 때만 허용하게 해놓았습니다.)
어떻게 해결하나?
2기들이 생각한 방안
BlackCompany 2기 멤버들이 (@Daae-Kim @geongyu09 @rlajm1203) 생각한 첫 번째 방안으로는
토큰에 유효 범위를 지정해서 전달하는 것입니다. 토큰의 유효 범위(페이지의 범위(?))를 같이 전달하면, 프론트 측에서 이를 검사하여 페이지를 이동하거나 이동하지 못하게 할 수 있습니다.
하지만 이는 엄청 비효율적인 방법으로, 페이지를 이동할 때마다 토큰의 범위가 유효한지 체크를 해야 하므로 속도가 저하된다는 단점이 있습니다.
관리자 API를 만드는 등의 다른 방안도 생각해보았지만, 근본적인 원인인 페이지를 이동하는 것은 막을 수 없다고 생각하여 이렇게 디스커션 올려봅니다.
etc..
리눅스에서 파일 접근 권한이 rwx가 있는 것처럼 하위 레벨 권한을 가진 사용자가 상위 레벨 권한의 정보를 조회할 수 있도록 시스템 정책 상으로 설정하는 것도 생각해보았는데 어떻게 생각하시나요?
Beta Was this translation helpful? Give feedback.
All reactions