Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ASP.NET标识+;Windows身份验证(混合模式-窗体和Windows)_Asp.net_Asp.net Mvc_Asp.net Identity_Windows Authentication - Fatal编程技术网

ASP.NET标识+;Windows身份验证(混合模式-窗体和Windows)

ASP.NET标识+;Windows身份验证(混合模式-窗体和Windows),asp.net,asp.net-mvc,asp.net-identity,windows-authentication,Asp.net,Asp.net Mvc,Asp.net Identity,Windows Authentication,在问这个问题之前,我已经尽了最大的努力在网上搜索了一下。我在stackoverflow上看到过类似的问题,但是,很长一段时间以来都没有令人满意的答案。这是再次尝试回答这个反复出现的问题 问题 如何构建一个ASP.NET MVC 5网站,该网站对内部网用户使用“Windows Auth”,对Internet用户使用“Forms Auth”?我们希望使用ASP.NET标识来实现这一点。此外,我们不希望使用Active Directory组进行授权。对于Intranet用户,我们希望使用Active

在问这个问题之前,我已经尽了最大的努力在网上搜索了一下。我在stackoverflow上看到过类似的问题,但是,很长一段时间以来都没有令人满意的答案。这是再次尝试回答这个反复出现的问题

问题

如何构建一个ASP.NET MVC 5网站,该网站对内部网用户使用“Windows Auth”,对Internet用户使用“Forms Auth”?我们希望使用ASP.NET标识来实现这一点。此外,我们不希望使用Active Directory组进行授权。对于Intranet用户,我们希望使用Active Directory对他们进行身份验证,然后使用ASP.NET标识来管理他们的角色和其他配置文件数据

如果我们不要求最终用户选择auth方法,那就太好了。web应用程序应该无缝地登录intranet用户。他们甚至不应该知道有一个登录屏幕。同样,不应该要求互联网用户输入他们的域凭据。他们应该立即看到基于表单的登录屏幕

有什么推荐的解决方法吗?或者,您是否可以评论以下任何一种是正确的解决方案

仅供参考这是2004年的文章,现在可能没有帮助:

一种可能的方法是在IIS中创建两个站点,但具有相同的目标文件夹,其中包含站点源。例如,第一个站点用于启用Windows身份验证模式并绑定到80端口的内部用户,而第二个站点用于启用匿名模式并绑定到8080端口的外部用户。然后,在防火墙上,您必须配置NAT,所有来自本地网络或VPN的请求将重定向到端口80上的本地IIS服务器,所有来自Internet的请求将重定向到IIS服务器的端口8080。

您想从一个URL处理表单和广告身份验证吗?我使用了thinktecture(基于声明的身份验证)作为WIF和封送各种形式的身份验证的框架。然而,要从一个URL处理if,我必须在登录时处理一些逻辑,将用户与基于广告或表单的链接关联起来。在最近的一个项目中,当我们创建用户帐户时,这是在用户管理中处理的(它与表单Auth的广告相关联)。然后,当用户登录时,他们会将广告域名作为登录的一部分。有很多方法可以实现这一点,这只是我使用过的方法之一。例如,不需要域,只需使用用户名,然后检查用户名上的广告或基于表单的标志,然后相应地处理身份验证

编辑
只是重新阅读你的问题的更新。internet用户和intranet用户是否相同?如果是这样的话,你只需要进行全面的基于表单的身份验证,并独立于广告管理产品数据库中的用户。如果他们是相同的,那么他们可以在域名之前登录到用户名。如果您想完全依赖AD.

这一术语是混合模式认证。我已经做过很多次了。你只需要调整你的主站点。我是这样做的

保持主MVC站点不变,但以匿名方式运行,而不是在Windows Auth下运行

内部站点

创建重定向URL站点:将此站点设置为Window Auth,以便您可以从Active Directory中提取用户ID。为您的用户提供此URL和/或使其成为他们在您的Intranet上单击的链接。然后,该站点调用MVC站点并传递用户凭据(登录id)

a。这可以通过URL上的加密字符串或cookie中的加密值来完成。您也可以使用过期日期/时间值进行加密

b。(从Forms Auth发言)使用该用户ID创建Forms身份验证票证。运行您拥有的任何其他登录逻辑。完成了


外部站点-无需更改。让用户按原样登录。

为什么不将您的网站代码放在服务器上,将其自动复制到两个单独的网站上,然后通过配置web.config来处理身份验证中的更改。(一个是匿名设置,另一个是windows身份验证。)


它不像其他方法那样时髦,但相对来说比较无痛。有两个网站,但内容(除了web.config)是相同的。

我前一段时间在我以前的工作中做过这方面的概念验证,所以细节不清楚,我没有任何代码可供参考

这些要求是:

  • 用于内部(LAN)和外部(internet)访问的单一URL
  • 两种类型的用户,域上的用户和外部(非广告)用户
  • 域用户内部和外部的Windows身份验证
  • 使用iPad时能够输入域登录详细信息(无windows身份验证)
我提出的解决方案的核心思想是,我们使用Active Directory组策略向http请求头用户代理添加一个自定义字符串,内容无关紧要,实际上我们使用了一个长的随机字符串

然后,该站点的登录页将对此进行检查,如果找到,将使用windows auth重定向到虚拟目录,该虚拟目录检查其广告帐户,填充ASP.NET身份验证令牌,然后将其重定向到其主页

如果自定义标题不在那里,那么它只显示正常的登录表单


唯一的另一件事是在正常登录表单中添加广告电子邮件/密码检查,这样,如果域用户从非windows设备(iPad)访问该站点,那么他们就可以使用其正常登录详细信息。

IIS配置
在IIS中为整个站点启用匿名身份验证状态,并为根目录下的某些文件夹(例如,/WindowsLogin)启用Windows身份验证。在此文件夹中放置aspx文件(用于WebForms项目)或创建ApiController(用于MVC项目)

站点设置
日志