본문 바로가기
ОКБ (실험 설계국)/IT Project

7. [Project Argus] 비밀번호 관리 프로그램 - 로그인 모듈

by Rosmary 2022. 2. 5.
728x90
반응형

 

 

 

올 1월부터 Project Argus를 본격적으로 시작하게 되었다. GUI로 프로그램을 제작해야하는 상황이다보니, CLI보다 예외 처리도 많고 섬세하게 확인해야 하는 부분도 배로 늘어나서 그런지, 이전의 IDPW 프로젝트에 비해 로그인 창 하나 만드는 것만으로도 시간이 꽤 걸리는 편이다. 

 

이번 프로젝트에서 tkinter를 사용하고 있는데, 각 모듈 별 창을 별도로 생성하여 띄워주는 방식으로 코딩을 진행하고 있다. 그 중 첫 단계인 로그인 창에 대한 제작이 1월 말에 마무리가 되었다.

 

 

1. 디자인

 

아이콘을 어떻게 만들지 고민중이다..

 

우선 로그인 창은 위에서 보는 사진처럼 프로그램 접속을 위한 ID, 비밀번호를 입력하는 것은 대부분의 프로그램과 동일하다. 다른 점이 있다면, 향후 LInux와의 연계를 위해 Server를 선택할 수 있는 Combobox가 추가되었다는 것이다. 프로그램이 window에서 동작하는 것을 기본으로 염두에 두고 있지만, 향후 확장성을 고려하여 Linux와도 연동이 가능하도록 Server를 선택할 수 있는 란을 추가했다. 

 

 

로그인 창인 만큼, 하단의 버튼 역시 매우 단순하다. 로그인(Sign in), 프로그램 소개(About), 프로그램 종료(Cancel)로 구분되어 있으며, About 버튼을 제외한 나머지는 동작이 가능하도록 프로그램을 완료한 상태다. 이는 조금 뒤에서 확인하도록 하고...

 

창 내의 각 입력 폼 및 버튼은 tab 키로 이동이 가능하며, tab키로 버튼 위로 이동한 뒤 Enter를 치면 클릭한 것과 동일한 효과가 나타나도록 함수 Binding을 진행했다.

 

사용자가 로그인 중 값을 입력하지 않거나, 잘못된 계정 정보를 입력하는 경우 해당 내용에 대한 알림을 줄 수 있도록 별도의 Label 창을 생성했다. " * Please type your account"로 표시되는 부분이 그 부분인데, 만약 사용자가 입력 폼을 빈 값으로 둔 채 Sign in 버튼을 클릭하면 아래와 같이, 로그인 폼을 입력하라는 안내 문구가 출력된다.

 

왼쪽부터 ID, Password 미입력, 계정 정보 불일치와 관련된 문구가 출력된 화면이다.

 

 

 

2. 로그인

 

로그인과 관련된 계정 정보는 별도의 파일로 만들어놓았다. 이전의 IDPW에서는 이 계정 정보 저장 파일을 CSV로 만들었는데, CSV의 특성 상 계정 정보나 암호화된 Password에 콤마(,)가 들어가는 경우 문제가 발생하는 것을 업무 상 많이 경험했던 필자였기에 이번에는 json 형태로 계정 정보를 저장하는 것으로 방향을 정했다(Python은 dictionary 타입이 존재하기 때문에 확실히 json이 편하긴 하다)

 

프로그램 계정의 패스워드는 SHA512를 사용한 값을 저장하는 것으로 변경했다. 따라서 이전의 IDPW보다 프로그램 계정에 대한 보안성은 많이 향상되었다. 물론 Hash 암호화된 값 역시, 계정 정보를 저장하는 파일에 기록되기 때문에 로그인 검증은 문제가 없다.

 

프로그램 접속 시, 계정 정보가 일치하지 않는 경우, Authentication Fail 안내 문구를 띄우지만, 특정 횟수 이상 연달아 계정 오류가 발생하면 계정은 잠긴다. 최대 로그인 시도 횟수는 별도의 설정 파일에서 값을 읽어 검증하게되는데, 이 값을 초과하여 연속 로그인 오류가 발생하면 다음과 같이 계정이 잠겼다는 문구가 출력된다.

 

 

 

 

3. 계정 비밀번호 변경 주기 적용

 

계정의 비밀번호 최대 사용 기간 또한 이전의 IDPW와 동일하게 구현해 놓았다. 만약 특정 사용자 계정의 비밀번호 사용 기간이 만료되는 경우, 아래와 같이 비밀번호 변경과 관련된 창이 별도로 팝업된다. 이전의 IDPW가 90일로 하드코딩되어 있던 것과 달리, 별도의 설정파일에서 읽어들이는 값으로 검증하기 때문에 변경 주기는 관리자에 의해 변경이 가능하다.

 

지금 보니 Extend 버튼에 오타가 보인다...

비밀번호 변경 시, 기존에 사용하던 비밀번호를 정확히 입력해야 변경 및 계정 정보 갱신이 진행된다. 만약 이전 패스워드가 일치하지 않는 경우, 아래와 같이 기존 패스워드가 일치하지 않는다는 문구가 안내로 출력된다.

 

 

또한 새 비밀번호의 경우, 비밀번호 생성 정책을 적용했는데, 기본적으로 대, 소문자, 특수문자 및 숫자가 1글자 이상 포함되어야 하며, 비밀번호 최소 길이는 8글자 이상이어야 한다는 것이다. 만약 이 기준을 충족하지 못하는 경우, 관련 내용에 대한 안내문구가 표시된다.

 

 

 

위의 조건에 부합하나, 이전에 사용하던 비밀번호와 동일한 값으로 새 비밀번호를 지정하면, 이전에 사용된 비밀번호를 재사용 할 수 없다는 안내 문구와 함께 다시 비밀번호를 변경할 것을 요구한다.

 

 

이전과 동일하지 않은 비밀번호로, 비밀번호 생성 정책까지 만족한다면, 비밀번호가 변경되며, 해당 계정의 만료일도 갱신된다. 기존 로그인 창에 입력한 비밀번호 값은 모두 삭제되어, 로그인 시 변경된 비밀번호를 직접 입력해주어야 한다.

 

비밀번호 변경 후, 로그인 창 화면

프로그램 계정에 대한 로그인이 성공할 경우, 중복 로그인 방지 기능이 작동하며, 해당 계정이 로그아웃되기 전까지 로그인이 불가하게 된다. 아무래도 프로그램 자체가 워낙 개인적으로 민감한 정보를 저장하다보니, 중복 로그인을 허용하지 않는 방향으로 프로그램을 진행하게 되었다.

 

 

만약, 계정 비밀번호를 다음에 변경하고 싶다면 Extend 버튼을 눌러 계정 만료일을 연장하면 된다(권장하긴 그렇지만...)

 

 

4. 프로그램 로그 기록.

 

로그인과 관련된 모든 내용은 사용자 로그와 시스템 로그로 나누어져 저장된다. 사용자 로그는 사용자가 프로그램 내에서 행한 모든 행동이 기록되는 로그이며, 시스템 로그는 사용자 행위 중, 특이 사항에 대한(사용자의 비밀번호 변경, 계정 잠김, 중복 로그인 시도 등 프로그램 침해와 연관이 깊은 내용) 내용이 기록된다.

사용자 로그 일부. 사용자가 Cancel 버튼을 누른 내용도 로그로 기록된다.
시스템 로그 일부 내역

 

 

 

 

5. 향후 진행 사항

 

추후 로그인 관련 프로그램 모듈에 추가 사항이 들어갈 수 있을 듯 한데, 우선은 구상했던 동작들은 전부 제대로 동작하는 상태라 로그인 모듈 관련 작업은 여기서 1차적으로 마무리하려 한다. 

 

Project Argus의 다음 진행 사항은 아래와 같다.

 

-  메인 창 제공 기능 정리 및 디자인 작업 진행

본격적으로 사용자 계정 조회, 계정 추가/삭제 등을 진행할 수 있는 윈도우 창을 생성하는 작업을 진행하려 한다. 먼저 추가할 기능은 대략적으로 나와 있으니(계정 추가, 조회, 삭제 및 자동 로그인), 구현하려는 기능을 토대로 디자인 구성을 진행해보려 한다. 

 

 


 

IDPW 프로젝트와 비교했을 때, CLI 기반으로 움직이는 프로그램에 비해 본 프로젝트가 손이 많이 가는 것은 사실이다. 하지만 손이 많이 가는만큼 프로그램 완성 후 결과물은 이전의 IDPW 프로그램보다 가시성도 좋고 사용도 편하다(이제 로그인 모듈 하나 만들었는데도 이 정도이니...)

 

다음 달성 목표도 종종 시간을 내어 작업을 진행할 것이며, 작업이 대략적으로 마무리되면 포스팅을 진행하려 한다.

 

 

 

Fin.

 

 

 

반응형

댓글