C# 如何在不登录的情况下检查用户的域名

C# 如何在不登录的情况下检查用户的域名,c#,asp.net-mvc,active-directory,owin,windows-authentication,C#,Asp.net Mvc,Active Directory,Owin,Windows Authentication,我有一个MVC5应用程序,它使用OWIN和identity2.0进行身份验证。 我的应用程序需要混合身份验证: 对于不是域的用户,比如说“dom1”,他们应该看到一个基于表单的页面 对于域“dom1”上的用户,他们应该通过windows身份验证登录 我想知道当用户第一次点击我的帐户/登录操作时,如何在没有身份验证的情况下获取用户的域名 我使用了: PrincipalContext pcontext = new PrincipalContext(ContextType.Domain); var

我有一个MVC5应用程序,它使用OWIN和identity2.0进行身份验证。 我的应用程序需要混合身份验证:

  • 对于不是域的用户,比如说“dom1”,他们应该看到一个基于表单的页面
  • 对于域“dom1”上的用户,他们应该通过windows身份验证登录
我想知道当用户第一次点击我的
帐户/登录
操作时,如何在没有身份验证的情况下获取用户的域名

我使用了:

PrincipalContext pcontext = new PrincipalContext(ContextType.Domain);
var domainName = pcontext.ConnectedServer;

但是这两个都显示了部署网站的机器的域名,而不是客户端的域名


非常感谢您的帮助,如果我犯了任何错误,请纠正我。

您可以在这里看到域名

Environment.UserDomainName
获取与当前用户关联的网络域名

根据:

UserDomainName属性首先尝试获取当前用户的Windows帐户名的域名组件。如果尝试失败,此属性将尝试获取与UserName属性提供的用户名关联的域名。如果由于主机未加入域而导致尝试失败,则返回主机名

如果您没有经过身份验证,很遗憾,您会看到主机名。据我所知,没有办法解决这个问题

您还可以在此处获取客户端请求的ip

HttpRequest.UserHostAddress

这个领域可以在这里看到

Environment.UserDomainName
获取与当前用户关联的网络域名

根据:

UserDomainName属性首先尝试获取当前用户的Windows帐户名的域名组件。如果尝试失败,此属性将尝试获取与UserName属性提供的用户名关联的域名。如果由于主机未加入域而导致尝试失败,则返回主机名

如果您没有经过身份验证,很遗憾,您会看到主机名。据我所知,没有办法解决这个问题

您还可以在此处获取客户端请求的ip

HttpRequest.UserHostAddress
“未经认证”?你不能。必须先完成Windows身份验证,然后才能查看用户的帐户

这是因为Windows身份验证的工作方式:

  • 浏览器以匿名方式访问站点
  • IIS返回401响应
  • 浏览器通过再次发出包含Windows凭据的请求进行响应
  • IIS使用域控制器验证凭据
  • IIS将已验证的Windows凭据传递给应用程序
  • 您的应用程序只能在第5步看到有关用户帐户的任何信息—在身份验证成功完成之后。

    “未经身份验证”?你不能。必须先完成Windows身份验证,然后才能查看用户的帐户

    这是因为Windows身份验证的工作方式:

  • 浏览器以匿名方式访问站点
  • IIS返回401响应
  • 浏览器通过再次发出包含Windows凭据的请求进行响应
  • IIS使用域控制器验证凭据
  • IIS将已验证的Windows凭据传递给应用程序

  • 您的应用程序只能在第5步看到有关用户帐户的任何信息—在身份验证成功完成后。

    否,我需要的是域名而不是IP地址。
    环境。UserDomainName
    获取与当前用户关联的网络域名。否,它还返回服务器的域名。。。您测试的服务器和用户的域名是否可能相同“与当前用户关联的网络域名。”不,我需要域名而不是IP地址。
    环境。UserDomainName
    获取与当前用户关联的网络域名。不,它还返回服务器的域名。。。您测试的服务器和用户的域名是否可能相同“与当前用户关联的网络域名。”