在网上看到别人写的以SQL作为membership-Provider的MOSS表单认证,我就自己动手,改为以AD作为membership-Provider进行单认证。
(SQL版是转别人的)
一、建立AD和表单双认证及匿名访问;
1、建立一个WEB应用程序,一个网站集(MOSS:8000); 默认为WINDOWS认证;
2、扩展WEB应用
在管理中心中选“管理中心 > 应用程序管理 > 创建或扩展 Web 应用程序 > 扩展现有 Web 应用程序”
在“将 Web 应用程序扩展到其他 IIS 网站”中选择新建IIS网站,并选择一个新的端口号:8001;
打开允许匿名访问,并设定负载均衡的URL为MOSS:8001; 区域选“INTERNET”(或其它的也行,主要是为后面的验证程序用)
WEB应用扩展应该来说就是同一个数据库的不同访问方式,但是网站物理文件的位置是独立的,如果在原网站上做的一些自定义功能,扩展后要重新部署,系
统并不会自动地将自定义功能也一并“扩展”.
3、配置验证提供程序
在“管理中心 > 应用程序管理 > 验证提供程序
”中选择MOSS应用程序,会看到有两行提供者,一个是“默认”一个是“INTERNET",PROVIDER都是WINDOWS;
选择INTERNET进行修改;
在“管理中心 > 应用程序管理 > 验证提供程序 > 编辑验证”中,将验证类型改为“表单”,勾上“启用匿名访问”,并在成员身份提供程序名称中填上“
AspNetSqlMembershipProvider”,在角色管理器名称中填上“AspNetSqlRoleProvider”
现在进入8000和8001网站就是一个是AD用户认证,一个是表单身份认证;
4、修改WEB.CONFIG文件
打开8001和8000网站的WEB.CONFIG文件,位置可以从IIS中找到;
加入connectionStrings、membership和roleManager节,其中connectionStrings写在<configuration>中,membership和roleManager写在<syste
m.web>中,具体写法如下:
<connectionStrings>
<remove name="ASPNETDBConnectionString1" />
<add name="ASPNETDBConnectionString1"
connectionString="Data Source=数据库服务器IP;
Initial Catalog=数据库名;
User ID=访问者名称;
Password=访问者口令"
providerName="System.Data.SqlClient" />
</connectionStrings>
connectionStrings节的作用是建立一个联接数据库的字符串;
membership,rolemanager定义了提供者的信息,要注意的是,.net 2.0中提供者的类型是SqlProvider,而MOSS中改成了System.Web.Security.SqlMembershipProvider
applicationName要填写正确的应用程序名称;
<membership defaultProvider="AspNetSqlMembershipProvider" userIsOnlineTimeWindow="30">
<providers>
<clear />
<add connectionStringName="ASPNETDBConnectionString1"
applicationName="应用程序名称"
enablePasswordRetrieval="false"
enablePasswordReset="true"
requiresQuestionAndAnswer="true"
requiresUniqueEmail="true"
passwordFormat="Hashed"
maxInvalidPasswordAttempts="5"
minRequiredPasswordLength="1"
minRequiredNonalphanumericCharacters="0"
name="AspNetSqlMembershipProvider"
type="System.Web.Security.SqlMembershipProvider" />
</providers>
</membership>
<roleManager enabled="true">
<providers>
<remove name="AspNetSqlRoleProvider"/>
<add connectionStringName="ASPNETDBConnectionString1"
applicationName="应用程序名称"
name="AspNetSqlRoleProvider"
type="System.Web.Security.SqlRoleProvider,
System.Web,
Version=2.0.0.0,
Culture=neutral,
PublicKeyToken=b03f5f7f11d50a3a"/>
</providers>
</roleManager>
修改了WEB.CONFIG文件后,可以实现了双认证方式的访问;
5、给表单认证用户授权
在“管理中心 > 应用程序管理 > Web 应用程序的策略 ”中添加用户,选择“internet”区域,增加表单认证的用户,并选择“完全控制”;
6、启用匿名访问;
用刚才的表单认证用户名称登录8001网站,在“网站设置 > 权限 > 匿名访问 ”中选择“整个网站”;
二、建立单一的表单认证;
按说单一的表单认证应该和上述的方法一样,关键就是WEB.CONFIG文件要修改正确,但是我原样做了几遍后,登录页面是出来了,但是就是不能登录,现在还不清楚是什么原因,上网查了一些资料,都是做的双认证的方式。是不是MOSS就不支持单一的表单认证呢?再想想吧,看过几天能不能搞好。
********
(2007-07-06)昨天把单一表单认证的问题搞好了,操作的办法和双认证是一样的。
1、建立一个新的WEB应用程序;
2、在此WEB APP下建一个首要网站;
3、在管理中心中修改认证方式为匿名和表单认证;
4、修改网站的WEB.CONFIG文件(如上);
5、此时网站就可以登录了,但是登录的用户没有任何权限;
6、将管理中心的WEB.CONFIG也作同样修改(将PROVIDER的定义加入);
7、在管理中心的策略中加上认证用户为所有者;
8、现在可以登录到网站了,并在“人员”中加上其它用户。
(AD版,自己动手做的,其实差别只有一点,就是改变系统的membership-Provider,呵呵。用AD作为membership-Provider的好处就是,和企业原来的AD用户相一致,不用一份用户在AD中,一份用户在SQL数据库中,不管是外网认证还是内网认证都是同一套用户,为以后的系统统一身份认证作准备。)
<!--***************************************-->
<connectionStrings>
<add name="ADConnectionString" connectionString="LDAP://qwliang.com/OU=qwliang科技股份有限公司,DC=qwliang,DC=com" />
</connectionStrings>
<!--***************************************-->
<!--***************************************-->
<!-- membership provider -->
<membership defaultProvider="MembershipADProvider">
<providers>
<add name="MembershipADProvider" type="System.Web.Security.ActiveDirectoryMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" enableSearchMethods="true" connectionStringName="ADConnectionString" connectionUsername="qwliang\admin" connectionPassword="qwliang" />
</providers>
</membership>
<!--***************************************-->