将Supabase会话访问令牌存储在Streamlit会话状态是否安全?
你的做法存在这些安全风险
- 令牌泄露风险:Streamlit的
st.session_state存储在服务器端会话中,若服务器遭入侵或会话管理存在漏洞,攻击者可能窃取到存储的access token。另外,共享设备上若会话未及时过期,后续使用者有可能访问到遗留的会话数据。 - 令牌滥用风险:Supabase的access token具备访问用户数据的权限,一旦泄露,攻击者可直接用它调用Supabase API,获取甚至篡改该用户的敏感数据——毕竟
get_user只是令牌权限覆盖的场景之一。 - 无令牌刷新机制:access token通常有过期时间(默认3600秒),你只存储了access token,过期后用户必须重新登录,体验不佳。更安全的方式是同时存储refresh token,实现自动刷新access token的逻辑。
优化建议
- 无需手动在会话状态存储access token,Supabase登录后会自动维护会话,在其他页面直接调用
supabase.auth.get_user()即可,Supabase客户端会自动处理会话信息的获取。 - 若必须手动管理令牌,需同时存储refresh token,并实现自动刷新逻辑,避免用户频繁登录。
- 设置合理的会话过期时间,用户退出时及时清除会话状态中的令牌及Supabase会话。
内容的提问来源于stack exchange,提问作者pacdev
相关产品推荐
相关产品推荐

