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

在Blazor Server中获取以RunAs启动的浏览器运行用户的用户名

调试Razor Server应用时获取RunAs启动浏览器的用户身份

问题说明

本地用IIS Express调试Razor Server应用时,通过RunAs命令以测试用户身份启动Chrome/Edge,但现有代码无法获取浏览器端的测试用户名——开发环境下用WindowsIdentity.GetCurrent()或Environment.UserName拿到的是操作系统当前登录用户,而生产环境依赖AuthenticationStateProvider的方法在调试时返回null。

解决方案

要获取浏览器端的测试用户身份,需要启用Windows身份验证并配置IIS Express支持该验证方式,具体步骤如下:

  1. 修改launchSettings.json配置
    在项目的launchSettings.json文件中,找到IIS Express相关配置,开启Windows身份验证并关闭匿名验证:

    "iisSettings": {
      "windowsAuthentication": true,
      "anonymousAuthentication": false,
      "iisExpress": {
        "applicationUrl": "http://localhost:xxxx",
        "sslPort": 0
      }
    }
    
  2. 配置身份验证中间件
    在Program.cs中确保添加Windows身份验证的中间件,确保请求经过身份验证流程:

    // 注册Windows身份验证服务
    builder.Services.AddAuthentication(IISDefaults.AuthenticationScheme);
    
    // 启用身份验证和授权中间件(顺序不能错)
    app.UseAuthentication();
    app.UseAuthorization();
    
  3. 修改CurrentUser类的UserName获取逻辑
    启用Windows身份验证后,无论开发还是生产环境,都可以通过AuthenticationStateProvider获取浏览器端的用户身份。注意避免异步转同步的死锁问题,建议使用异步方法:

    public class CurrentUser
    {
        private readonly AuthenticationStateProvider _authenticationStateProvider;
    
        public CurrentUser(AuthenticationStateProvider authenticationStateProvider)
        {
            _authenticationStateProvider = authenticationStateProvider;
        }
    
        // 推荐用异步方法替代同步属性,避免死锁
        public async Task<string> GetUserNameAsync()
        {
            var authState = await _authenticationStateProvider.GetAuthenticationStateAsync();
            return authState.User.Identity?.Name ?? "未知用户";
        }
    }
    

原理说明

  • 直接调用WindowsIdentity.GetCurrent()获取的是IIS Express进程运行的用户(即你登录系统的用户),而非浏览器端的测试用户。
  • 启用Windows身份验证后,ASP.NET Core会通过NTLM/Negotiate协议,从浏览器请求中获取测试用户的身份信息,此时AuthenticationStateProvider就能拿到正确的用户名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 11:07:17