如何允许匿名访问 IIS 7.5 上的网站?
How to allow anonymous access to web-site on IIS 7.5?
tl;dr:为什么
<allow users="?">
可以在 IIS Express 上工作,但不能在 IIS 上工作?
背景
我有一个新的 asp.net 网络表单项目。当 运行 在本地 Windows 7 IIS Express 上时,我可以通过添加 deny [= 来阻止 "all users" 访问站点15=] 规则为 web.config:
web.config
<configuration>
<system.web>
<authorization>
<deny users="*" />
</authorization>
</system.web>
</configuration>
这导致我被拒绝访问:
所以这是有道理的。
我可以拒绝匿名用户的访问
我是 web.config,我可以使用 ?
标记而不是 all 来阻止对 匿名 用户的访问 (*
) 标记:
<authorization>
<deny users="?" />
</authorization>
并且因为我没有通过身份验证,所以我将再次被 401
未授权:
这是有道理的。
允许匿名
我可以允许匿名访问,方法是将 web.config 中的 deny
更改为 allow
:
<authorization>
<allow users="?" />
</authorization>
现在我被带到了主页:
这是有道理的。
但不适用于 IIS
以上适用于 IIS Express。但是当我发布到 Windows Server 2012 R2 IIS 7.5 时,尝试 allow
匿名 (?
) 用户不起作用:
这没有意义:
- 适用于 IIS Express
- 在 IIS 7.5 上失败
尝试允许所有人
而不是:
- 只允许匿名用户(
?
)
- 我可以尝试允许所有用户(
*
)
我再次更改web.config以允许所有人(*
):
<authorization>
<allow users="*" />
</authorization>
在本地我可以仍然访问网站:
但是一旦我发布到 IIS 7.5,它仍然失败:
怎么回事?
我没有做错任何事。那么我需要改变什么?
最初我创建了一个空网站,然后开始向其中添加内容。后来,我需要创建真正的网站(包含显示信息的页面和单击按钮),所以我从一个 空 Web 表单网站 开始。
我的感觉是欧文打破了一切。
然而,这是怎么回事?
解决方案
我找到了。有一些关于网站的设置不随网站一起使用。也就是说,您无法通过 web.config
或网站文件夹中的任何其他文件配置有关网站的配置选项。特别是:
我不知道 IIS 在哪里存储 anonymous 身份验证的使用。但如果没有匿名身份验证,IIS 就无法意识到匿名用户是匿名的。
启用匿名身份验证:
使IIS意识到匿名用户是匿名的。
这说明:
- 为什么它可以在 IIS Expres 上运行
- 为什么它不能在 IIS 7.5 上运行
- 为什么当两个网站具有完全相同的一组配置文件时它仍然不起作用
它没有解释为什么在未启用匿名身份验证时 IIS 不将匿名用户视为匿名用户;但那是另一天的另一个问题。如果你读到这里,你可以复制粘贴我刚才说的所有内容,然后接受。否则我得等两天才能自己回答。最好你得到代表。
您通过找到解决方案来学习一些东西。恭喜。
授权发生在 身份验证之后。因此,在 IIS 上,您会在授权规则被处理之前看到 401.2 错误页面。只有在将正确的身份验证方法设置为启用后,事情才会开始解决。
如果您禁用其所有身份验证方法,IIS Express 应该会为您提供相同的 401.2 错误页面。请注意。
A Microsoft Patterns and Practices article 详细解释了为什么需要启用匿名身份验证才能允许匿名用户:
ASP.NET authentication is a two-step process. First,
- Internet Information Services (IIS) authenticates the user and creates a Windows token to represent the user.
- If IIS is configured to use anonymous authentication, a token for the IUSR_MACHINE account is generated and used to represent the anonymous user.
IIS-then passes the token to ASP.NET.
Note Because forms authentication does not rely on IIS authentication, you should configure anonymous access for your application in IIS if you intend to use forms authentication in your ASP.NET application
In IIS, anonymous access is enabled for all applications that use forms authentication.
IIS allows the request because anonymous access is enabled in the IIS metabase. ASP.NET confirms that the authorization element includes a tag.
在向 IIS 发出请求时,有两种方法可以对用户进行身份验证:
- IIS 会自行验证您的身份(使用基本、摘要或 Windows 身份验证)
- IIS 配置为允许 "anonymous" 身份验证,网站将自行处理身份验证
这里令人困惑的部分是:
- 匿名 就 IIS 而言
- 匿名 就ASP.net 表单身份验证而言
从 IIS 的角度来看,任何将使用 Forms(或 Owin,或任何其他自定义身份验证模块)进行身份验证的请求仍然是 anonymous请求:
| IIS Authentication | Application Authentication |
|--------------------|----------------------------|
| Basic | |
| Digest | |
| Windows | |
| Anonymous | Forms |
| Anonymous | Owin |
| Anonymous | BasicAuthModule |
当我试图允许 匿名 用户访问时:
<allow users="?" />
这是一个 Forms 身份验证指令。但是为了甚至 reach 表单身份验证,您必须在 IIS 级别允许 anonymous 身份验证。
tl;dr:为什么
<allow users="?">
可以在 IIS Express 上工作,但不能在 IIS 上工作?
背景
我有一个新的 asp.net 网络表单项目。当 运行 在本地 Windows 7 IIS Express 上时,我可以通过添加 deny [= 来阻止 "all users" 访问站点15=] 规则为 web.config:
web.config
<configuration>
<system.web>
<authorization>
<deny users="*" />
</authorization>
</system.web>
</configuration>
这导致我被拒绝访问:
所以这是有道理的。
我可以拒绝匿名用户的访问
我是 web.config,我可以使用 ?
标记而不是 all 来阻止对 匿名 用户的访问 (*
) 标记:
<authorization>
<deny users="?" />
</authorization>
并且因为我没有通过身份验证,所以我将再次被 401
未授权:
这是有道理的。
允许匿名
我可以允许匿名访问,方法是将 web.config 中的 deny
更改为 allow
:
<authorization>
<allow users="?" />
</authorization>
现在我被带到了主页:
这是有道理的。
但不适用于 IIS
以上适用于 IIS Express。但是当我发布到 Windows Server 2012 R2 IIS 7.5 时,尝试 allow
匿名 (?
) 用户不起作用:
这没有意义:
- 适用于 IIS Express
- 在 IIS 7.5 上失败
尝试允许所有人
而不是:
- 只允许匿名用户(
?
) - 我可以尝试允许所有用户(
*
)
我再次更改web.config以允许所有人(*
):
<authorization>
<allow users="*" />
</authorization>
在本地我可以仍然访问网站:
但是一旦我发布到 IIS 7.5,它仍然失败:
怎么回事?
我没有做错任何事。那么我需要改变什么?
最初我创建了一个空网站,然后开始向其中添加内容。后来,我需要创建真正的网站(包含显示信息的页面和单击按钮),所以我从一个 空 Web 表单网站 开始。
我的感觉是欧文打破了一切。
然而,这是怎么回事?
解决方案
我找到了。有一些关于网站的设置不随网站一起使用。也就是说,您无法通过 web.config
或网站文件夹中的任何其他文件配置有关网站的配置选项。特别是:
我不知道 IIS 在哪里存储 anonymous 身份验证的使用。但如果没有匿名身份验证,IIS 就无法意识到匿名用户是匿名的。
启用匿名身份验证:
使IIS意识到匿名用户是匿名的。
这说明:
- 为什么它可以在 IIS Expres 上运行
- 为什么它不能在 IIS 7.5 上运行
- 为什么当两个网站具有完全相同的一组配置文件时它仍然不起作用
它没有解释为什么在未启用匿名身份验证时 IIS 不将匿名用户视为匿名用户;但那是另一天的另一个问题。如果你读到这里,你可以复制粘贴我刚才说的所有内容,然后接受。否则我得等两天才能自己回答。最好你得到代表。
您通过找到解决方案来学习一些东西。恭喜。
授权发生在 身份验证之后。因此,在 IIS 上,您会在授权规则被处理之前看到 401.2 错误页面。只有在将正确的身份验证方法设置为启用后,事情才会开始解决。
如果您禁用其所有身份验证方法,IIS Express 应该会为您提供相同的 401.2 错误页面。请注意。
A Microsoft Patterns and Practices article 详细解释了为什么需要启用匿名身份验证才能允许匿名用户:
ASP.NET authentication is a two-step process. First,
- Internet Information Services (IIS) authenticates the user and creates a Windows token to represent the user.
- If IIS is configured to use anonymous authentication, a token for the IUSR_MACHINE account is generated and used to represent the anonymous user.
IIS-then passes the token to ASP.NET.
Note Because forms authentication does not rely on IIS authentication, you should configure anonymous access for your application in IIS if you intend to use forms authentication in your ASP.NET application
In IIS, anonymous access is enabled for all applications that use forms authentication.
IIS allows the request because anonymous access is enabled in the IIS metabase. ASP.NET confirms that the authorization element includes a tag.
在向 IIS 发出请求时,有两种方法可以对用户进行身份验证:
- IIS 会自行验证您的身份(使用基本、摘要或 Windows 身份验证)
- IIS 配置为允许 "anonymous" 身份验证,网站将自行处理身份验证
这里令人困惑的部分是:
- 匿名 就 IIS 而言
- 匿名 就ASP.net 表单身份验证而言
从 IIS 的角度来看,任何将使用 Forms(或 Owin,或任何其他自定义身份验证模块)进行身份验证的请求仍然是 anonymous请求:
| IIS Authentication | Application Authentication |
|--------------------|----------------------------|
| Basic | |
| Digest | |
| Windows | |
| Anonymous | Forms |
| Anonymous | Owin |
| Anonymous | BasicAuthModule |
当我试图允许 匿名 用户访问时:
<allow users="?" />
这是一个 Forms 身份验证指令。但是为了甚至 reach 表单身份验证,您必须在 IIS 级别允许 anonymous 身份验证。