我在azure上托管了一个应用程序服务.这是在加载的第一页上运行的代码.

 protected void Page_Load(object sender, EventArgs e)
    {

        if (HttpContext.Current.User.Identity.IsAuthenticated)
        {

            var identity = HttpContext.Current.User.Identity.Name;
            lblUserInfo.Text = $"Found User -- > {identity}";
            return;
        }
        else
        {
            
            lblUserInfo.Text = "Name Unknown!";

        }
    }

当我在本地运行它时,它在标签中正确地显示"名称未知".在Azure上,应用程序服务上的身份验证Blade 表明,没有登录就无法访问该服务.换句话说,该应用程序可以被组织中的人员访问.

我对MSDN documentation的理解是HttpContext.现在的用户可用于获取代码中的用户名.这不起作用,因为当我在azure上托管时,代码中的标识变量为空.网站标签在Azure上运行时显示"Found User --> ".

What else do I need to do in order to get the user's name in the code?

推荐答案

如何从Azure上托管的应用程序服务获取登录用户名?

要获取Azure Web App中的当前用户,请使用

var UserName = ((System.Security.Claims.ClaimsIdentity)User.Identity).Claims.Where(c => c.Type == "name").FirstOrDefault().Value;
  • 如果您想从Azure Web App接收用户登录的数据,可以try 对Azure Web App使用基本身份验证.

  • 我们需要使用OpenID Connect对Azure AD租户的用户进行身份验证.

OR

  • 应用程序服务使用特定的标头将用户声明传达给您的应用程序.这些标头不能由外部请求设置,因此只有当它们由应用程序服务设置时,它们才存在.

  • 用户的声明可以通过将它们注入到请求头中来获得.不允许外部请求设置这些标头,只有由应用程序服务设置时,这些标头才存在.

  • 使用X-MS-CLIENT-PRINCIPAL-NAME作为http resquest标头以获取用户名.

var UserName=httpRequest.Headers["X-MS-CLIENT-PRINCIPAL-NAME"].ToString();
  • 这仅适用于Azure Web App
  • ClaimsPrincipal实例可用于检索经过身份验证的用户信息.

Asp.net相关问答推荐

502 DotNet WebApplication的网关nginx已损坏

在 Web.Config 中模拟标签

在每个对象上设置 ClientIDMode = Static 是否有任何缺点(在母版页的 maincontent 上设置)

如何在 ASP.NET 中以 'YYYY-MM-DD' 格式获取当前日期?

IIS Request.UserHostAddress 返回 IPV6 (::1),即使禁用了 IPV6

说服遗留应用程序 VB6 开发人员切换到 C#

ASP.NET 在更新面板更新时显示正在加载...消息

多行文本框多个换行符

Web.config 导致被组策略阻止错误

文本框的输入按键触发事件

Ef core:执行 MaxAsync 时序列不包含任何元素

如何在asp.net mvc的html.actionlink中调用javascript函数?

System.Web.MVC 自 MS14-059 以来未复制到 bin 文件夹中.如何防止由于 Windows 更新而创建缺少 DLL 的构建?

将 Http 请求读入字节数组

解析器错误消息:无法加载类型网络营销

ASP.NET Excel 导出编码问题

IsMobileDevice 是如何工作的?

如何修复 ASP.NET 错误文件 'nnn.aspx' 尚未预编译,无法请求.?

您的下一个 ASP.NET 项目的 Select 是什么:Web 窗体还是 MVC?

jQuery Ajax 调用 - 成功设置变量值