Selenium 구글 OTP 처리하기

정태경·2023년 2월 4일
0
post-thumbnail
post-custom-banner

웹 자동화를 구현하다 보면 CAPTCHA라던가 2채널 인증(Two Factor Authentication
) 등 매우 번거로운 요소들이 존재한다. Selenium의 공식 문서에도 CAPTCHA와 2채널 인증 관련된 내용이 명시되어 있는데 아래와 같이 안내되고 있다.

CAPTCHA

  • 테스트 환경에서 CAPTCHA 비활성화
  • 테스트가 CAPTCHA를 우회할 수 있도록 후크 추가

Two Factor Authentication

  • 자동화에서 해당 사용자 자격 증명을 사용할 수 있도록 테스트 환경에서 특정 사용자에 대해 2FA를 비활성화합니다.
  • 테스트 환경에서 2FA를 비활성화합니다.
  • 특정 IP에서 로그인하는 경우 2FA를 비활성화하십시오.

가장 좋은 방법은 테스트 환경 또는 특정 IP에 대한 화이트리스트 등록 등을 통해 이러한 요소들이 자동화 환경에서 노출되지 않도록 조치하는 것이지만 현실은 녹록지 않다. 늘 그렇듯이 사규 또는 보안상의 문제, 권한과 관련된 문제 등 테스트 환경을 의도한 대로 설정하는 것이 불가능한 상황들도 있을 것이다. 내가 그러했고 2채널 인증을 우회하기 위해 방법을 찾아보았다.

구글링해보니 OTP 생성 시 발급되는 시크릿 키를 알면 pyotp 라이브러리를 사용하여 OTP 6자리 숫자를 얻어올 수 있다고 하더라.
따라서 아래와 같이 간단한 코드를 작성해서 테스트보았는데 정상적으로 OTP 정보를 얻어올 수 있었고 후크로 만들어 자동화 테스트에 활용할 수 있었다.


from pyotp import *


key_list = {
    "kr_taekyeong" : "ADBCDEFGHIJKLM", # 테스트 계정 A의 OTP 시크릿 키
    "sg_taekyeong" : "LOPQRSTUVWXYZ"   # 테스트 계정 B의 OTP 시크릿 키
    }


for key, value in key_list.items():
    totp = TOTP(value)
    token = totp.now()
    print(f"{key} : ", token)
    
 ---
 
 kr_taekyeong : 456 912
 sg_taekyeong : 123 456
profile
두나무 업비트 QA 엔지니어
post-custom-banner

0개의 댓글