You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure WebApp SSO认证后获取用户用户名或邮箱的问题咨询

Azure WebApp SSO 后获取用户信息实现方案

核心逻辑

该需求可直接通过Azure App Service内置身份验证(Easy Auth)的自动注入能力实现,无需自行实现OAuth2认证流程,你之前参考的是Databricks专属认证文档,和当前场景不匹配,因此出现401资源不存在错误。

最简实现:直接读取请求头获取用户邮箱

Azure App Service在用户完成SSO登录后,会自动将身份信息注入转发到应用的HTTP请求头,直接读取对应字段即可:

  • 对应用户登录邮箱的请求头为 X-MS-CLIENT-PRINCIPAL-NAME
  • 对应用户租户内唯一ID的请求头为 X-MS-CLIENT-PRINCIPAL-ID,适合作为权限绑定的唯一标识

Streamlit 读取请求头的代码示例:

import streamlit as st
from streamlit.web.server.websocket_headers import _get_websocket_headers

# 读取所有请求头
headers = _get_websocket_headers()
# 提取身份信息
user_email = headers.get("X-MS-CLIENT-PRINCIPAL-NAME")
user_id = headers.get("X-MS-CLIENT-PRINCIPAL-ID")

# 未获取到身份信息直接拦截
if not user_email:
    st.error("未获取到有效身份信息,请确认已完成组织SSO登录")
    st.stop()

# 基于邮箱实现权限控制
st.write(f"当前登录用户:{user_email}")
# 权限判断示例
admin_list = ["admin@your-tenant.com", "ops@your-tenant.com"]
if user_email in admin_list:
    st.info("您拥有管理员权限,可查看全量数据")
    # 管理员功能逻辑
else:
    st.info("您拥有普通用户权限,仅可查看公开数据")
    # 普通用户功能逻辑

扩展实现:调用Graph API获取更多用户属性

如果需要获取部门、职位等请求头未包含的用户属性,可按以下操作实现:

  1. 进入Azure Portal对应Web应用的「身份验证」面板,编辑已配置的Microsoft身份提供方
  2. 在「令牌配置」栏添加Microsoft Graph的User.Read委托权限,勾选「授予租户管理员同意」
  3. 保存配置后,即可从请求头 X-MS-TOKEN-AAD-ACCESS-TOKEN 获取Graph API访问令牌,调用接口获取完整用户信息

代码示例:

import requests
import streamlit as st
from streamlit.web.server.websocket_headers import _get_websocket_headers

headers = _get_websocket_headers()
access_token = headers.get("X-MS-TOKEN-AAD-ACCESS-TOKEN")

if access_token:
    resp = requests.get(
        "https://graph.microsoft.com/v1.0/me",
        headers={"Authorization": f"Bearer {access_token}"}
    )
    full_user_info = resp.json()
    # 可获取displayName、mail、department、jobTitle等所有Azure AD同步的用户属性
    st.write("完整用户信息:", full_user_info)

原401错误说明

你之前的报错是因为请求的资源ID为Databricks的应用ID,和你当前的Web应用场景不匹配,按照上述方案无需自行发起OAuth2认证请求,直接使用内置注入的请求头即可解决问题。

内容的提问来源于stack exchange,提问作者clank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:54:03