이번 프로젝트에서는 관리자용 계정을 따로 구분해서 만들고, 관리자계정이 가진 권한으로 특정 API를 실행할 수 있도록 진행하였다.
처음에는 관리자용 계정을 DB에 직접적으로 입력하고 회원가입을하는 API를 따로 만들지 안으려 했으나, 관리자 계정을 생성하면서 DB에 직접입력하면 비밀번호가 Hashing처리되지 않은 쌩 문자열의 비밀번호를 만들게 되어서 보안적인 문제가 발생한다.
그렇다면 과연 단 1~5개 즉 몇개 안되는 관리자 계정을 만들기위해서 일반 회원가입과 거의 똑같은 회원가입 로직을 따로 만들어야만 하는 것일까? 의문이다.
실제 현업에서 그렇게 사용하는지 아닌지 보편적인 방법을 알지 못하기에 이렇게 고민의 흔적을 적으면서 생각한다.
실질적으로 관리자계정과, 일반계정에 부여되는 토큰의 secretkey가 다르기 때문에 이를 이용해서 관리자와 일반사용자의 권한은 구분이 가능하다.
관리자만 쓸 수 있는 API에 관리자 토큰 secretkey를 이용한 토큰검증만 이룰 수 있다면, 크게 문제는 없을 것이다.
하지만 회원가입은 누구든지 진행할 수 있다면 문제가 발생할 것이다. 딱히 회원가입에서 인증을 하는 절차가 없기 때문이다. 또한 Email이나 휴대폰번호 등을 인증한다하여도, 결국 그것은 본인확인이 될 뿐이지, 해당 회원가입을 진행중인 사용자가, 우리 서비스를 관리하는 인원이라고 확정할 수 없다.
그렇다면 어떻게 해당 인원이 우리 서비스를 관리하는 인원인지 확인하고 관리자 계정을 만들어야할까?
23-05-26추가
어제 하루 내내 여기저기 관리자 계정을 어떤식으로 만드는지 만들었는지 등등 찾아보면서 내가 선택할 수 있는 방법이 대략 2가지로 축약되었다.
계정을 생성하는 API를 만들어서 계정을 생성한 이후에 해당 API로직을 지우는방법
이미 계정을 생성해서 DB에 저장해 놨기 때문에 Hashing 등의 문제가 발생하지도 않고, 깔끔하기는 하였다.
하지만 이 방법은 해당 계정의 비밀번호를 잊어버리거나, 추가적인 계정 생성이 필요하다면 다시 또 해당로직을 다시 짜야한다는 단점이 존재했다.
계정을 생성해 주는 담당자에게 신청서를 작성해서 넣으면 담당자가 이를 확인하고 직접 계정을 생성해서 전달해 주는 방식을 취하는 방법이 가장 그럴 듯했다.
하지만 이 방법 또한 결국 코드를 깃허브에 올리는 순간 다른사람이 해당 API를 사용할 수도 있게 된다. 그렇다면 어떤방법을 사용해야 해당 담당자만 이 관리자 계정생성API를 사용할 수 있을까?
처음부터 API의 URI를 숨겨두고 로직을 작성하고, 계정생성을 담당하는 담당자에게만 숨겨진 URI를 직접적으로 주는 방식을 채택한다면, 그 담당자가 URI를 뿌리거나 도용당하지 않는한 보안적으로 우수할 것이라 판단해 이 방법을 사용해보도록 해야겠다.