Skip to content

Streamlit-Authenticator: Streamlit 앱에서 사용자 인증 보호하는 방법

Updated on

Streamlit은 2019년에 출시된 이래로 앱을 개발하고 클라우드에 배포하는 방식을 혁신했습니다. 그러나 Streamlit 앱에서 안전한 사용자 인증이 필요한 경우, Streamlit-Authenticator라는 솔루션이 등장했습니다. 이 문서는 Streamlit-Authenticator를 사용하여 Streamlit 앱에 안전한 사용자 인증을 추가하는 방법에 대한 포괄적인 가이드를 제공합니다.

Streamlit-Authenticator란 무엇인가요?

Streamlit-Authenticator는 Streamlit 애플리케이션에서 사용자 인증 정보를 확인할 수 있는 보안 인증 모듈입니다. 비밀번호 재설정, 새로운 사용자 등록, 비밀번호 및 사용자 이름 잊어버림 위젯과 같은 기능을 제공하는 Streamlit-Authenticator는 앱이 인증된 사용자에게만 안전하고 접근 가능하도록 보장합니다. 중요한 점은 이 기술로 일정 수준의 보안을 추가할 수 있지만, SSO 공급자와의 적절한 인증과는 비교할 수 없다는 것입니다.

Streamlit 앱을 Tableau로 변신시켜 주는 멋진 데이터 분석 및 데이터 시각화 도구를 들어보셨나요?

PyGWalker (opens in a new tab)는 Tableau와 유사한 UI를 Streamlit 앱에 쉽게 통합할 수 있도록 도와주는 Python 라이브러리입니다.


PyGWalker 커뮤니티에 큰 기여를 한 Sven (opens in a new tab)에게 특별한 감사를 전합니다!

그 외에도 PyGWalker GitHub 페이지 (opens in a new tab)에서 더 많은 PyGWalker 예제를 확인할 수 있습니다.

Streamlit-Authenticator의 설치 및 설정

Streamlit-Authenticator는 손쉽게 Streamlit 애플리케이션에 통합할 수 있는 강력한 도구입니다. 그러나 사용하기 전에 설치하고 설정해야 합니다. 이 과정은 몇 단계로 진행될 수 있습니다.

Streamlit-Authenticator 설치 방법

Streamlit-Authenticator를 설치하는 것은 터미널에서 pip install을 실행하는 것만으로 간단합니다. 다음과 같이 진행할 수 있습니다:

pip install streamlit-authenticator

이 명령은 Python 패키지 설치 도구인 pip을 사용하여 Python 패키지 인덱스(PyPI)에서 Streamlit-Authenticator를 다운로드하고 설치하도록 지시합니다. 설치가 완료되면, 다른 Python 패키지와 마찬가지로 Streamlit-Authenticator를 Streamlit 앱에서 가져올 수 있습니다.

Streamlit-Authenticator 설정하기

Streamlit-Authenticator를 설치한 후, 다음 단계는 설정하는 것입니다. 이를 위해 Streamlit-Authenticator를 특정 Streamlit 앱과 연동해야 합니다. 다음은 그 방법에 대한 단계별 가이드입니다:

  1. Streamlit 앱에서 Streamlit-Authenticator를 가져옵니다:
import streamlit_authenticator as sa
  1. 앱의 특정 설정과 함께 Streamlit-Authenticator를 초기화합니다:
auth = sa.Authenticator(
    SECRET_KEY,
    token_url="/token",
    token_ttl=3600,
    password_hashing_method=sa.PasswordHashingMethod.BCRYPT,
)
  1. auth.login_required 데코레이터를 사용하여 Streamlit route를 보호합니다:
@auth.login_required
def protected():
    st.write("This is a protected route.")

Streamlit-Authenticator를 사용하여 Streamlit에서 사용자 인증 구현하기

이제 Streamlit-Authenticator를 설치하고 설정했으므로, Streamlit 앱에 사용자 인증 서비스를 추가할 시간입니다. 이는 로그인 및 등록 양식 생성, 사용자 세션 처리 등을 포함합니다.

Streamlit에서 사용자 인증 서비스 추가하기

Streamlit에 사용자 인증 서비스를 추가하기 위해서는 사용자가 자격 증명을 입력할 수 있는 로그인 양식을 만들어야 합니다. 다음은 Streamlit-Authenticator를 사용하여 이를 수행하는 예시입니다:

@st.route("/login")
def login():
    username = st.text_input("Username")
    password = st.text_input("Password", type="password")
 
    if st.button("Login"):
        user = auth.authenticate(username, password)
        if user is not None:
            auth.login_user(user)
            st.success("Logged in successfully.")
        else:
            st.error("Invalid username or password.")

SSO 없이 사용자 인증 구현하기

싱글 사인온(SSO)을 구현할 수 없는 경우 걱정하지 마세요. Streamlit-Authenticator를 사용하면 SSO 없이도 Streamlit 앱에 기본 인증을 추가할 수 있습니다. 이를 위해 모든 사용자 간에 공유되는 전역 암호를 만들어야 합니다. 다음은 그 방법입니다:

## .streamlit/secrets.toml
password = "streamlit123"

그런 다음 Streamlit 앱에서 입력한 암호와 저장된 암호를 비교할 수 있습니다:

password = st.text_input("Password", type="password")
 
if password == st.secrets["password"]:
    st.success("Access granted.")
else:
    st.error("Access denied.")

Streamlit의 Secrets 관리 이해하기

Streamlit의 비밀 관리 기능은 사용자 인증에 중요한 역할을합니다. 이 기능을 사용하면 비밀번호 및 API 키와 같은 민감한 정보를 코드 외부에 안전하게 저장할 수 있습니다. 이는 Streamlit 앱의 보안과 사용자의 개인 정보 보호에 필수적입니다.

이전에 혼란스러웠던 점에 대해 사과드립니다. 더 자세한 내용, 예시 및 사실을 포함하여 각 섹션에 대해 더 깊이 알아보겠습니다.

Streamlit-Authenticator의 고급 기능

Streamlit-Authenticator는 기본 사용자 인증에 관한 것뿐만 아니라 여러 고급 기능을 제공하여 Streamlit 앱에서 사용자 관리에 포괄적인 해결책을 제공합니다. 이러한 기능에는 비밀번호 재설정, 새 사용자 등록 및 비밀번호 및 사용자 이름을 잊어버린 경우 처리를 위한 위젯이 포함됩니다. 이러한 기능을 자세히 알아보겠습니다.

비밀번호 재설정 위젯 생성

Streamlit-Authenticator의 주요 기능 중 하나는 비밀번호 재설정 위젯을 생성할 수 있는 능력입니다. 이는 사용자 인증을 처리하는 모든 애플리케이션에 필수적인 기능입니다. Streamlit-Authenticator를 사용하여 비밀번호 재설정 위젯을 만드는 단계별 가이드는 다음과 같습니다:

  1. 먼저, 비밀번호 재설정 양식을 위한 새 경로를 Streamlit 앱에 만듭니다.
@st.route("/password-reset")
def password_reset():
    ...
  1. 이 경로 내에서 사용자가 이메일 주소를 입력할 수 있는 양식을 만듭니다.
email = st.text_input("이메일 주소를 입력하세요")
if st.button("비밀번호 재설정"):
    ...
  1. 사용자가 양식을 제출하면 Streamlit-Authenticator를 사용하여 비밀번호 재설정 링크를 생성합니다.
reset_link = auth.generate_password_reset_link(email)
  1. 마지막으로, 이 링크를 사용자의 이메일 주소로 전송합니다. Python의 smtplib 또는 yagmail과 같은 이메일 라이브러리를 사용할 수 있습니다.

새 사용자 등록 위젯 생성

Streamlit-Authenticator를 사용하면 Streamlit 앱에 새 사용자 등록 위젯을 쉽게 추가할 수 있습니다. 이 위젯을 사용하면 새로운 사용자가 원하는 사용자 이름과 비밀번호를 입력하여 계정을 만들 수 있습니다. Streamlit-Authenticator를 사용하여 새로운 사용자 등록 위젯을 만드는 방법은 다음과 같습니다:

  1. 등록 양식을 위한 새 경로를 Streamlit 앱에 만듭니다.
@st.route("/register")
def register():
    ...
  1. 이 경로 내에서 사용자가 원하는 사용자 이름과 비밀번호를 입력할 수 있는 양식을 만듭니다.
username = st.text_input("사용자 이름을 선택하세요")
password = st.text_input("비밀번호를 선택하세요", type="password")
if st.button("등록"):
    ...
  1. 사용자가 양식을 제출하면 Streamlit-Authenticator를 사용하여 입력한 자격 증명으로 새 사용자 계정을 생성합니다.
user = auth.create_user(username, password)
st.success("계정이 성공적으로 생성되었습니다.")

비밀번호 잊어버린 경우 위젯 생성

사용자가 비밀번호를 잊어버린 경우, 비밀번호 잊어버린 경우 위젯은 매우 유용 할 수 있습니다. 이 위젯을 사용하면 사용자가 이메일 주소를 입력하여 비밀번호를 재설정 할 수 있습니다. Streamlit-Authenticator를 사용하여 비밀번호 잊어버린 경우 위젯을 만드는 방법은 다음과 같습니다:

  1. 비밀번호 재설정 양식을 위한 새 경로를 Streamlit 앱에 만듭니다.
@st.route("/forgot-password")
def forgot_password():
    ...
  1. 이 경로 내에서 사용자가 이메일 주소를 입력할 수 있는 양식을 만듭니다.
email = st.text_input("이메일 주소를 입력하세요")
if st.button("비밀번호 재설정"):
    ...
  1. 사용자가 양식을 제출하면 Streamlit-Authenticator를 사용하여 비밀번호 재설정 링크를 생성하고 사용자의 이메일 주소로 전송합니다.

사용자 이름을 잊어버린 경우 위젯 생성

비밀번호를 잊어버린 경우 위젯과 마찬가지로, 사용자 이름을 잊어버린 경우 위젯도 사용자에게 유용 할 수 있습니다. 이 위젯을 사용하면 사용자가 이메일 주소를 입력하여 사용자 이름을 검색 할 수 있습니다. Streamlit-Authenticator를 사용하여 사용자 이름을 잊어버린 경우 위젯을 만드는 방법은 다음과 같습니다:

  1. 사용자 이름 검색 양식을 위한 새 경로를 Streamlit 앱에 만듭니다.
@st.route("/forgot-username")
def forgot_username():
    ...
  1. 이 경로 내에서 사용자가 이메일 주소를 입력할 수 있는 양식을 만듭니다.
email = st.text_input("이메일 주소를 입력하세요")
if st.button("사용자 이름 검색"):
    ...
  1. 사용자가 양식을 제출하면 Streamlit-Authenticator를 사용하여 사용자 이름을 검색하고 사용자의 이메일 주소로 전송합니다.
username = auth.get_username(email)
st.success(f"사용자 이름은 {username}입니다.")

Streamlit-Authenticator의 이러한 고급 기능들은 Streamlit 앱에서 사용자 인증에 대한 포괄적인 해결책을 제공합니다. 이러한 기능을 사용하여 앱의 보안 뿐만 아니라 사용자 친화성도 보장할 수 있습니다.

Streamlit-Authenticator: 기본 인증을 넘어서

Streamlit-Authenticator는 사용자 인증을 위한 견고한 해결책을 제공하는 동시에 사용자 경험을 향상시키고 사용자 관리를 간소화하는 다양한 기능을 제공합니다. 이러한 기능에는 사용자 역할 및 권한, 다중 요소 인증 및 제3자 인증 제공자와의 통합과 같은 기능이 포함됩니다. 이러한 기능을 통해 Streamlit 앱에 추가적인 보안과 유연성을 확보할 수 있습니다.

  • 사용자 역할 및 권한: Streamlit-Authenticator는 사용자 역할 및 권한을 지원하여 각 사용자가 앱에서 무엇을 할 수 있고 할 수 없는지를 제어할 수 있습니다. 예를 들어, 관리자, 편집자 및 뷰어를 위한 역할을 생성하고 각각 다른 권한을 부여할 수 있습니다. 이는 서로 다른 유형의 사용자에게 다른 요구 사항과 책임이 있는 앱에 특히 유용 할 수 있습니다.

  • 다중 요소 인증: 추가 보안을 위해, Streamlit-Authenticator는 다중 요소 인증(MFA)을 지원합니다. MFA를 사용하면 사용자가 자신을 인증하기 위해 두 개 이상의 증거(또는 요소)를 제공해야합니다. 이러한 요소는 알고 있는 것(비밀번호와 같은), 소지하고 있는 것(물리적 토큰 또는 스마트폰과 같은), 그리고 본인이거나 다른 생체 측정 데이터(지문 등)일 수 있습니다.

  • 제3자 인증 제공업체와의 통합: Streamlit-Authenticator는 Google, Facebook, Twitter와 같은 제3자 인증 제공업체와도 통합할 수 있습니다. 이를 통해 사용자는 이러한 플랫폼의 기존 계정을 사용하여 앱에 로그인 할 수 있으므로 로그인 프로세스가 더 빠르고 편리해집니다.

결론

Streamlit-Authenticator는 Streamlit 앱에서 사용자 인증에 대한 포괄적인 솔루션을 제공합니다. 로그인 및 등록과 같은 기본 인증 기능부터 비밀번호 재설정, 사용자 역할 및 권한, 다중 인증, 제3자 제공업체와의 통합과 같은 고급 기능까지, Streamlit-Authenticator는 앱을 보안하고 원활한 사용자 경험을 제공하기 위해 필요한 모든 기능을 갖추고 있습니다.

그러나 Streamlit-Authenticator는 강력한 도구임에도 불구하고 일부 단점이 있음을 유의해야합니다. 예를 들어 은행이나 의료 앱과 같은 높은 수준의 보안이 필요한 앱에는 적합하지 않을 수 있습니다. 또한 비교적 쉽게 설정할 수는 있지만 Python 및 웹 개발에 대한 일부 지식이 필요합니다.

이러한 잠재적인 단점에도 불구하고 Streamlit-Authenticator는 사용하기 쉽고 유연하며 강력한 기능을 갖춘 Streamlit 앱에서 사용자 인증의 인기있는 선택지로 남아 있습니다.

Streamlit 앱을 Tableau로 변환하는 멋진 데이터 분석 및 데이터 시각화 도구를 들어보셨나요?

PyGWalker (opens in a new tab)는 스트림릿 앱을 Tableau와 같은 사용자 인터페이스로 손쉽게 포함시킬 수 있는 Python 라이브러리입니다.

Streamlit에서 데이터 시각화를 위한 PyGWalker (opens in a new tab)

자주 묻는 질문

Q: Streamlit을 인증하는 방법은 무엇인가요?

A: Streamlit-Authenticator를 사용하여 Streamlit을 인증할 수 있습니다. Streamlit-Authenticator는 Streamlit 애플리케이션에서 사용자 자격 증명을 검증하는 안전한 인증 모듈로, 비밀번호 재설정, 새 사용자 등록, 잊어버린 비밀번호 및 사용자 이름 위젯과 같은 기능을 제공합니다.

Q: Streamlit에 사용자 인증을 추가하는 방법은 무엇인가요?

A: Streamlit-Authenticator를 설치하고 설정하여 Streamlit에 사용자 인증을 추가할 수 있습니다. 설정이 완료되면 로그인 및 등록 양식을 만들고 사용자 세션을 처리하는 등의 작업을 수행할 수 있습니다.

Q: Streamlit 인증 모듈이란 무엇인가요?

A: Streamlit-Authenticator는 Streamlit 앱을 위한 안전한 인증 모듈입니다. 사용자 자격 증명을 검증하고 사용자 세션을 관리하며 비밀번호 재설정, 새 사용자 등록, 잊어버린 비밀번호 및 사용자 이름 위젯과 같은 기능을 제공할 수 있습니다.

Q: Streamlit의 단점은 무엇인가요?

A: Streamlit은 데이터 앱을 만들기 위한 강력한 도구이지만 일부 단점이 있습니다. 예를 들어 은행이나 의료 앱과 같이 높은 수준의 보안이 필요한 앱에는 적합하지 않을 수 있습니다. 또한 비교적 쉽게 설정할 수는 있지만 Python 및 웹 개발에 대한 일부 지식이 필요합니다.