【问题标题】:User.Identity.Name is null?User.Identity.Name 为空?
【发布时间】:2015-11-28 11:50:54
【问题描述】:

我使用 Visual Studio 2015 在我的办公室 PC 上创建了一个简单的 Web api 项目,Windows 登录了公司域(AD)。我更改了 web.config 文件以进行集成身份验证 - <system.web><authentication mode="Windows" />。 url http://localhost:23151/api/Model1 从数据库返回一个有效的 xml 数据。

我在 IIS Express(开发服务器)设置的项目属性中将匿名身份验证更改为禁用,并将 Windows 身份验证更改为启用。

我在public IQuerybal<Model1> GetModel1() 中设置了一个断点并检查User.Identity.Name 的值并返回null?

更新: 奇怪的是我在另一台 PC 上创建了一个新项目(仍在 Visual Studio 2015 中),我可以从属性 User.Identity.Name 获取我的 Windows 登录名。

更新 2: 我试图将项目文件复制到新 PC 上,但仍然遇到同样的问题。所以应该是项目中的一些设置。很奇怪。

【问题讨论】:

标签: asp.net asp.net-mvc asp.net-mvc-5 asp.net-identity-2


【解决方案1】:

您的问题没有太多可解决的问题,但我最好的猜测是您忽略了授权控制器操作。您需要将 [Authorize] 属性添加到实际的控制器类(以保护其中的所有操作)或您在此处使用的单个操作。

如果您需要允许匿名访问相同的操作,您也可以添加[AllowAnonymous] 属性,但如果您至少没有[Authorize],则不会填充任何用户信息。

【讨论】:

  • 添加认证后url返回的xml文件为<Error> <Message>Authorization has been denied for this request.</Message> </Error>。当调试器单步执行控制方法 (Dispose) 中的语句时,Name 仍然为空。
  • 尝试在操作前同时添加[Authorize] [AllowAnonymous],但Name 仍然为空。
  • 那么,您实际上并没有被“登录”。如果您在 IIS 中运行,请检查是否实际启用了 Windows 身份验证。
  • 我在 Visual Studio 2015 中调试,它会自动启动 IIS Express。我想我在这里找到了解决方案stackoverflow.com/questions/4762538/…
  • IIS Express 没有设置。这一切都由 Visual Studio 中的项目控制。在解决方案资源管理器中单击您的项目并检查“属性”窗格。确保那里启用了 Windows 身份验证。
【解决方案2】:

我也遇到了 User.Identity.Name 为空的问题,我的环境是 AspNetCore MVC。事实证明,在某些配置更改时,Visual Studio 更改了我的 web.config 并将 forwardWindowsAuthToken 修改为“false”。填充 User.Identity.Name 需要为 true:

<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="true" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-13
    • 2013-02-14
    相关资源
    最近更新 更多