已部署Streamlit应用程序中的Azure登录问题

gudnpqoy  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(152)

我有一个streamlit应用程序,可以在本地完美运行,但无法部署它。我有这样的台词:

cmd = ['az', 'login']
result = subprocess.run(cmd, capture_output=True, text=True)

字符串
它在本地打开一个Web浏览器,但当我部署它时,它不会打开任何浏览器,并且永远保持运行。
问题是,我希望它使用该特定命令登录,因为Azure帐户是2FA帐户,并且通常放置az login -u username -p password的方式不起作用。

fcipmucu

fcipmucu1#

**Streamlit是一个无状态应用程序,因此无法以交互方式使用az login,您需要将Streamlit应用程序与Flask应用程序集成,并添加Azure身份验证步骤进行身份验证。请参阅此sample 另一种方法是创建Azure AD应用程序,并使用它进行身份验证和登录到与Flask集成的流式照明应用程序。

我尝试了一个简单的Streamlit代码,它使用--device-code运行az login命令
x1c 0d1x的数据



*我的 app.py代码:-

import streamlit as st
from azure.cli.core import get_default_cli
import threading

# Function to run 'az login --use-device-code' command in a separate thread
def run_az_login():
    cli = get_default_cli()
    device_code, url = cli.invoke(['login', '--use-device-code'])
    st.session_state.device_code = device_code
    st.session_state.url = url

# Main Streamlit app code
def main():
    st.title("Azure CLI Interactive Sign-In")

    if 'device_code' not in st.session_state:
        st.session_state.device_code = None
        st.session_state.url = None

    # Check if the user is logged in
    if st.session_state.device_code is None:
        st.write("Not logged in to Azure CLI.")

        # Button to initiate the login process
        if st.button("Log in to Azure CLI"):
            st.write("Running Azure CLI login...")
            login_thread = threading.Thread(target=run_az_login)
            login_thread.start()
    else:
        st.write("You are logged in to Azure CLI.")
        st.write("Device code:", st.session_state.device_code)
        st.write("URL:", st.session_state.url)

if __name__ == "__main__":
    main()

字符串
此代码不会将您重定向到**https://microsoft.com/devicelogin**,但在您的日志流部分中会看到相同的URL,因为日志流显示了以下Web应用程序的实时启动日志:-


相关问题