繁体   English   中英

IIS 混合匿名和 Windows 身份验证

[英]IIS Mixed Anonymous and Windows Authentication

我需要创建一个 ASP .NET 网页(托管在带有 IIS 7.5 的 Windows Server 2008R2 上),域用户和匿名用户应该可以看到该网页,而不会提示他们两个的凭据请求。 域用户应该有权查看整个页面,而匿名用户可以查看页面的公共部分。

  • 当我启用 Windows 身份验证时:域用户可以看到整个页面,但会提示匿名用户输入凭据。
  • 当我启用匿名身份验证或两者(匿名和窗口)时:匿名用户可以看到页面的公共部分,但域用户看不到整个页面(他们就像匿名用户一样)。

我使用以下字符串来区分匿名用户和域用户:

WindowsAccountName = HttpContext.Current.Request.LogonUserIdentity.Name;

如果 WindowsAccountName 为空,则用户为匿名用户,否则为域用户。 不幸的是,启用匿名身份验证时,WindowsAccountName 始终为空(即使对于域用户也是如此),但是当禁用匿名身份验证时,会提示非域用户输入凭据。

你有解决这些问题的办法吗? 请记住,域用户分布在不同的网络中,因此 IP 地址不是区分域用户和非域用户的好选择。

对我来说,这看起来像是 22 条规则

谢谢。

对此的术语是混合模式身份验证。 我已经多次这样做了。

这可以通过使用经过 Windows 身份验证的站点来完成,该站点不再从 AD 中提取用户凭据并将其传递给匿名站点。 我使用在 5 秒后过期的自定义票证(数据库中的 GUID)完成了此操作。 匿名站点获取传递的 GUID,查询数据库并获取用户 ID。 其他方法我使用包含用户 ID 和时间戳的加密 URL 参数来完成此操作。

内部站点

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

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

湾。 (从 Forms Auth 说起)使用该用户 ID 创建一个 Forms Authentication Ticket。 运行您拥有的任何其他登录逻辑。 完毕。

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

我不知道发布这个是否为时已晚。我最近致力于在.NET 4.8 MVC 应用程序的一页上启用匿名身份验证。

假设该页面可通过 URL 访问:User/MyCustomPage

应用程序配置如下:

1. In web.config authentication mode was specified and authorization was 
   set to deny for anonymous users.

    <system.web> 
       <authentication mode= "windows"/>
       <authorization>
          <deny users="?"/>
       </authorization>
    </system.web>


2. In the controller, authorize tag was there.

3. In IIS, windows authentication was enabled, and anonymous mode was disabled.

我做了以下步骤:

1. Removed authorize tag from the specific controller and added 
   [AllowAnonymous] tag.

2. Enabled anonymous authentication in the IIS server. Go to
   server->authentication-> Anonymous-> click Enable in the right pane.

3. I had to add the particular path, to exclude it from regular
   windows authentication by writing the below code in web.config file.

    <location path="User/MyCustomPage"/>
      <system.web>
         <authorization>
           <allow users="?"/>
         </authorization>
      </system.web>
    </location>

但是,在访问上述 URL 时,我仍然提示输入 Windows 凭据。 我发现的原因是: MyCustomPage 返回的视图正在消耗另一个资源。

因此,我也必须在 web.config 中添加该路径。

 <location path="Bundle/Content/css"/>
    <system.web>
       <authorization>
         <allow users="?"/>
       </authorization>
    </system.web>
 </location>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM