IIS(Internet Information Services)是微软的Web服务器软件,它提供了多种认证方法。其中,HTTP认证是一种常见的认证方式,但默认情况下,它只能验证Windows账户存储中的凭据。本文将探讨如何让IIS使用基本认证来验证ASP.NET Membership存储中的凭据。
尽管基本认证存在一些严重的缺点,如在未使用SSL的情况下,凭据以明文形式发送,以及由于HTTP的无状态特性,用户无法强制注销(大多数浏览器会在关闭浏览器窗口前缓存凭据),但结合IIS使用基本认证也有一些好处。它提供了一个所有实现HTTP协议的客户端都支持的通用认证接口,使用Membership可以跨多个Web应用程序共享凭据,并且它是平台独立的(无论是使用经典ASP、PHP、ASP.NET还是任何运行在IIS上的其他技术)。
模块可以通过以下配置选项进行配置:
<authenticationSection xmlns="urn:BasicAuthenticationModule" enabled="true" realm="test" requireAuthentication="true" requireSsl="false">
<cache enableCache="false" cacheDurationMinutes="1"/>
<roles enableRoles="true" applicationRoleName="sample"/>
</authenticationSection>
其中:
enabled
定义是否使用该模块。realm
定义在登录对话框中显示的文本。requireAuthentication
允许匿名和经过认证的用户登录(应用程序逻辑可以相应地处理这些情况)。requireSsl
如果设置为true,则用户无法在非https请求上进行认证。enableCache
如果启用,用户的认证密钥将被缓存一段时间。cacheDuration
定义缓存的持续时间(分钟)。enableRoles
启用应用程序的角色功能。applicationRoleName
- 用于分配用户权限的角色/应用程序名称。要开始使用应用程序,需要将下载的.dll
文件复制到bin
文件夹中,或者将DLL添加到全局程序集缓存(GAC),以便所有应用程序都可以在IIS中使用它。接下来,确保web.config
文件中包含并配置了以下部分:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="authenticationSection" type="BasicAuthenticationModule.AuthenticationSection, BasicAuthenticationModule"/>
</configSections>
<authenticationSection xmlns="urn:BasicAuthenticationModule" enabled="true" realm="dex test" requireAuthentication="true" requireSsl="false">
<cache enableCache="false" cacheDurationMinutes="1"/>
<roles enableRoles="true" applicationRoleName="sample"/>
</authenticationSection>
<connectionStrings>
<add name="ApplicationServices" connectionString="data source=.;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true" providerName="System.Data.SqlClient"/>
</connectionStrings>
<system.web>
<membership>
<providers>
<clear/>
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/"/>
</providers>
</membership>
<roleManager enabled="true">
<providers>
<clear/>
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="ApplicationServices" applicationName="/"/>
</providers>
</roleManager>
</system.web>
<system.webServer>
<validation validateIntegratedModeConfiguration="false"/>
<modules runAllManagedModulesForAllRequests="true">
<add name="CustomBasicAuthentication" type="BasicAuthenticationModule.AuthenticationModule, BasicAuthenticationModule"/>
</modules>
</system.webServer>
</configuration>
假设已经知道如何设置会员数据库。如果不知道,可以在MSDN页面上找到有关配置会员的更多信息。