在 IIS 7 中使用 .NET 成员资格身份验证配置 FTP
兼容性
版本 | 说明 |
---|---|
IIS 7.5 | FTP 7.5 服务作为 Windows 7 和 Windows Server 2008 R2 中 IIS 7.5 的功能提供。 |
IIS 7.0 | FTP 7.0 和 FTP 7.5 服务是 IIS 7.0 带外提供的,需要从以下 URL 下载和安装该服务:https://www.iis.net/downloads/microsoft/ftp。 |
介绍
Microsoft 创建了一个新的 FTP 服务,该服务针对 Windows Server® 2008 完全重新编写。 这种新的 FTP 服务包含许多新功能,使 Web 作者能够比以前更好地发布内容,并为 Web 管理员提供了更多的安全性和部署选项。
本文档将指导你配置默认网站以进行基于 FTP 成员资格的身份验证。
注意
本文档是使用本地 Web 服务器上安装的 SQL Server 实例编写的。
先决条件
必须准备好以下各项才能完成本文中的过程:
必须在 Windows Server 2008 上安装 IIS 7.0,并且必须配置以下设置:
- IIS 7.0 安装时创建的默认网站必须仍然存在。
- 必须安装 Internet Information Services 管理器。
必须安装新的 FTP 服务。 可以使用以下链接之一从 https://www.iis.net/ 网站下载并安装 FTP 服务:
- FTP 7.5 for IIS 7.0 (x64)
- FTP 7.5 for IIS 7.0 (x86)
设置内容权限以允许访问处理身份验证的扩展性 COM 进程:
打开命令提示符。
输入以下命令:
ICACLS "%SystemDrive%\inetpub\ftproot" /Grant "Network Service":M /T
关闭命令提示符。
将 FTP 发布添加到默认网站
在这第一个步骤中,你要将 FTP 发布添加到默认网站,并添加所需的设置,以允许本地管理员帐户编辑内容。
在 IIS 7.0 管理器的“连接”窗格中,展开树中的“站点”节点,然后单击“默认 Web 网站”。
在“操作”窗格中单击“添加 FTP 发布”。
出现“添加 FTP 站点发布”向导时:
从“IP 地址”下拉菜单中选择 FTP 站点的 IP 地址,或者选择接受默认选择“所有未分配”。对于本演练,请在“IP 地址”框中键入“127.0.0.1”,以输入计算机的本地环回 IP 地址。
注意
如果使用 IPv6,则还应该添加“::1”的 IPv6 localhost 绑定。
通常你会在“端口”框中输入 FTP 站点的 TCP/IP 端口。 对于本演练,请选择接受默认端口 21。
本演练不使用主机名,因此请确保“虚拟主机”框为空。
确保将“SSL 证书”下拉列表设置为“未选择”,并选择“允许 SSL”选项。
完成这些项,然后单击“下一步”。
在向导的下一页上,你将不会配置任何身份验证或授权设置,因为这些设置将在稍后配置。 单击“完成”,完成向导。
总结
回顾在本部分完成的项 - 我们通过以下方式向“默认网站”添加了 FTP 发布:
- 为端口 21 上的本地环回 IP 地址添加网站的 FTP 绑定
- 选择不对 FTP 站点使用安全套接字层 (SSL)。
注意
尚未启用任何身份验证或授权设置。
为 ASP.NET 配置成员资格身份验证
为本地 SQL Server 配置 ASP.NET 成员资格
本部分介绍为 ASP.NET 配置成员资格身份验证的基本过程。 有关详细信息,请参阅 MSDN 网站上的如何:在 ASP.NET 2.0 中对 SQL Server 使用表单身份验证主题中的“为 ASP.NET 配置成员资格”部分。
如果无权访问现有 SQL Server,则必须安装 SQL Server。
如果尚未创建 ASP.NET 数据库,则需要使用以下列表中适合所用框架版本的命令在 SQL Server 上生成 ASP.NET 数据库:
32 位框架:
"%windir%\Microsoft.NET\Framework\v2.0.50727\aspnet_regsql.exe" -S localhost -A all -E
64 位框架:
"%windir%\Microsoft.NET\Framework64\v2.0.50727\aspnet_regsql.exe" -S localhost -A all -E
注意
若要使用远程 SQL 服务器而不是以上示例中所示的“localhost”,请参阅如何:在 ASP.NET 2.0 中对 SQL Server 使用表单身份验证一文中的“部署注意事项”部分。
由于 FTP 扩展性的 COM 进程作为“NT AUTHORITY\Network Service”运行,因此需要将“NT AUTHORITY\Network Service”帐户添加到 SQL Server 上的 ASP.NET 数据库。 为此,请按照以下步骤操作:
- 打开 Microsoft SQL Server Enterprise 管理器。
- 为 NT AUTHORITY\Network Service 创建 SQL Server 登录名。
- 通过创建数据库用户授予对 Aspnetdb 数据库的登录访问权限。
- 将数据库用户添加到 aspnet_Membership_FullAccess 数据库角色。
为 ASP.NET 配置 FTP 成员资格
以下步骤说明配置 ASP.NET 以允许对 FTP 访问进行成员资格身份验证的过程。
使用文本编辑器(例如 Windows 记事本)打开根 web.config 文件,该文件位于与所用框架版本相对应的路径中:
32 位框架:
"%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config"
64 位框架:
"%SystemRoot%\Microsoft.NET\Framework64\v2.0.50727\CONFIG\web.config"
滚动到底部,将以下代码粘贴到 </configuration> 结束标记之前:
<location path="GlobalFtpSite/ftpsvc"> <connectionStrings> <add connectionString="Server=localhost;Database=aspnetdb;Integrated Security=true" name="FtpLocalSQLServer" /> </connectionStrings> <system.web> <membership defaultProvider="FtpSqlMembershipProvider"> <providers> <add name="FtpSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="FtpLocalSQLServer" enablePasswordRetrieval="false" enablePasswordReset="false" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" passwordFormat="Clear" /> </providers> </membership> <roleManager defaultProvider="FtpSqlRoleProvider" enabled="true"> <providers> <add name="FtpSqlRoleProvider" type="System.Web.Security.SqlRoleProvider,System.Web,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="FtpLocalSQLServer" applicationName="/" /> </providers> </roleManager> </system.web> </location>
保存并关闭根 web.config 文件。
总结
现已为 ASP.NET 配置成员资格身份验证。 回顾在本部分完成的项,我们通过以下方式配置了服务器:
- 为本地 SQL Server 配置 ASP.NET 成员资格
- 为 ASP.NET 配置 FTP 成员资格
配置 FTP 成员资格身份验证
本部分介绍如何使用默认网站配置成员资格数据库,该数据库稍后用于创建基于 FTP 的成员资格身份验证要使用的用户。 为此,请按照以下步骤操作:
先决条件步骤
- 打开“Internet Information Services (IIS)管理器”。
- 在“连接”树的顶部节点处展开你的计算机。
- 展开树中的“站点”节点。
配置 .NET 成员资格设置
步骤 1:添加连接字符串
突出显示树中的“默认网站”,双击“连接字符串”,然后执行以下步骤:
单击“操作”窗格中的“添加...”。
配置以下选项:
- 名称:“FtpLocalSQLServer”
- 服务器:“localhost”
- 数据库:“aspnetdb”
单击“确定”。
步骤 2:添加角色提供程序
突出显示树中的“默认网站”,双击“提供程序”,然后执行以下步骤:
从下拉列表中选择“.NET 角色”。
单击“操作”窗格中的“添加...”。
从下拉列表中选择“SqlRoleProvider”。
配置以下选项:
- 名称:“FtpSqlRoleProvider”
- 连接字符串名称:“FtpLocalSQLServer”
- 应用程序名称:“/”
单击“确定”。
步骤 3:添加成员资格提供程序
突出显示树中的“默认网站”,双击“提供程序”,然后执行以下步骤:
从下拉列表中选择“.NET 用户”。
单击“操作”窗格中的“添加...”。
从下拉列表中选择“SqlMembershipProvider”。
配置以下选项:
- 名称:“FtpSqlMembershipProvider”
- 连接字符串名称:“FtpLocalSQLServer”
- 应用程序名称:“/”
单击“确定”。
步骤 4:为 FTP 成员资格添加角色
突出显示树中的“默认网站”,双击“.NET 角色”,然后执行以下步骤:
你可能会看到有关连接的错误对话框。 如果是这样,请单击“确定”关闭错误对话框,然后使用以下步骤配置默认提供程序:
- 在“操作”窗格中单击“设置默认提供程序...”。
- 从下拉列表中选择“FtpSqlRoleProvider”。
- 单击“确定”。
单击“操作”窗格中的“添加...”。
配置以下选项:
- 名称:“ftprole”
单击“确定”。
步骤 5:为 FTP 成员资格添加用户帐户
突出显示树中的“默认网站”,双击“.NET 用户”,然后执行以下步骤:
你可能会看到有关连接的错误对话框。 如果是这样,请单击“确定”关闭错误对话框,然后使用以下步骤配置默认提供程序:
- 在“操作”窗格中单击“设置默认提供程序...”。
- 从下拉列表中选择“FtpSqlMembershipProvider”。
- 单击“确定”。
单击“操作”窗格中的“添加”。
配置以下选项:
- 用户名:“ftpuser”
- 电子邮件:“ftpuser@localhost.local”
- 密码:“P@ssw0rd”
单击 “下一步” 。
将用户添加到“ftprole”,然后单击“完成”。
为 FTP 启用成员资格身份验证
为 FTP 配置成员资格身份验证
突出显示树中的“默认网站”,双击“FTP 身份验证”,然后执行以下步骤:
- 单击“操作”窗格中的“自定义提供程序...”。
- 选中“AspNetAuth”框。
- 单击“确定”。
现在可以使用以下两种方法之一授权 FTP 用户:
方法 1:为成员资格角色配置 FTP 授权规则
突出显示树中的“默认网站”,双击“FTP 授权规则”,然后执行以下步骤:
- 单击“操作”窗格中的“添加允许规则”。
- 为访问选项选择“指定的角色或用户组”。
- 键入“ftprole”作为角色名称。
- 对于“权限”选项,选择“读取”和“写入”。
- 单击“确定”。
方法 2:为成员资格用户配置 FTP 授权规则
突出显示树中的“默认网站”,双击“FTP 授权规则”,然后执行以下步骤:
- 单击“操作”窗格中的“添加允许规则”。
- 为访问选项选择“指定的用户”。
- 键入“ftpuser”作为用户名。
- 对于“权限”选项,选择“读取”和“写入”。
- 单击“确定”。
总结
回顾在本部分完成的项,我们通过以下方式配置了服务器:
配置 .NET 成员资格设置:
- 添加连接字符串
- 添加角色提供程序
- 添加成员资格提供程序
- 为 FTP 成员资格添加角色
- 为 FTP 成员资格添加用户帐户
为 FTP 启用成员资格身份验证:
- 为成员资格配置 FTP 身份验证
- 为成员资格用户配置 FTP 授权规则
- 为成员资格角色配置 FTP 授权规则
疑难解答
如果使用成员资格角色,可能需要安装以下 Microsoft 知识库文章中所述的修补程序:
https://support.microsoft.com/kb/955136/
尝试登录时,你会收到以下回复:
530-User cannot log in.
Win32 error:
Error details: .Net SqlClient Data Provider: An error has occurred while establishing a connection to the server.
When connecting to SQL Server 2005, this failure may be caused by the fact that under the default settings SQL Server
does not allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a connection to SQL Server)
530 End
Login failed.
如果尚未将 SQL 服务器配置为接受远程连接,则会导致此错误。