【问题标题】:Why 'WindowsIdentity.GetCurrent().Name' returns IISAppPool\\[AppPoolName]为什么 'WindowsIdentity.GetCurrent().Name' 返回 IISAppPool\\[AppPoolName]
【发布时间】:2018-10-20 05:26:14
【问题描述】:

我有一个 Asp Net 核心应用程序。我已将身份验证设置为 Windows 身份验证。当我从 Visual Studio 运行应用程序时,WindowsIdentity.GetCurrent().Name 返回我的计算机名称,当我将它托管在 IIS 上时,它给出了 IISAppPool 名称。我想获取用户的域用户名并存储在数据库中。

上述情况是我拥有anonymousAuthentication: true 的时候。

这是我改变它的时候。 IIS 的launchSettings.json 内容:

"iisSettings": {
"windowsAuthentication": true,
"anonymousAuthentication": false,
"iisExpress": {
  "applicationUrl": "http://localhost:21021/",
  "sslPort": 0
}

我还在TokenAuthController 上添加了[AbpAllowAnonymous]

现在我在页面加载时收到提示,要求输入用户名和密码。我不知道我应该添加什么作为我的用户名和密码。我已经尝试过我的 Windows 用户名和密码,但它一直提示我输入用户名和密码!

【问题讨论】:

    标签: asp.net iis windows-authentication aspnetboilerplate


    【解决方案1】:

    可能duplicate。如果您是在 Microsoft 提供的模板中从头开始,那么获取 Windows 标识很容易。

    从 Abp 执行此操作可能会稍微复杂一些。

    【讨论】:

    • 情况不太相似。那是 MVC,我的是 Angular & Asp Core。我不知道如何按照@vivek-nuna 的建议在 Angular 的页面上设置特定授权。
    【解决方案2】:

    为了执行您似乎想要执行的操作,您需要告诉 iis 以经过身份验证的用户身份运行应用程序。这可以在 authentication > ASP.NET impersonation config 选项下基于每个 appdomain 完成;但是,您必须以某种方式对用户进行身份验证,无论是基本身份验证、Kerberos 还是分配线程主体的 HTTP 模块(基本不需要额外的编码,windows 也不需要,但用户必须在同一个域中)。如果没有这个,应用程序将作为应用程序池的服务帐户运行,因此线程的身份就是这样。此外,执行此操作时,用户将拥有他们在服务器上的权限(因此,如果您登录他们没有本机访问权限的文件夹,您将收到错误消息)。

    【讨论】:

    • 目前我正在从 VS 运行应用程序。你能告诉我应该在哪里设置你建议的模拟配置选项吗?
    • IIS 中有一个 GUI。对于 IIS express,您必须在配置文件中添加功能。这篇 SO 帖子应该可以帮助您:stackoverflow.com/questions/4762538/… 再次,基本身份验证可能是通过 Windows 的更好途径
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-19
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    相关资源
    最近更新 更多