Moss配制Form认证

 

一.配制Form认证

1.创建Web应用程序  运行iisreset /noforce  

2.创建网站集 

3.配制站点为Form认证 成员验证提供程序:AspNetSqlMembershipProvider  角色验证提供程序:AspNetSqlRoleProvider

二.配制默认Membership

1.在站点的Config文件<system.web>节中加入以下代码。

<membership defaultProvider="AspNetSqlMembershipProvider">

        <providers>

          <remove name="AspNetSqlmembershipProvider" />

          <add connectionStringName="AspNetSqlProvider"

            passwordAttemptWindow="10"

            enablePasswordRetrieval="false"

            enablePasswordReset="true"

            requiresQuestionAndAnswer="true"

            applicationName="/"

            requiresUniqueEmail="false"

            passwordFormat="Hashed"

            description="Stores and retrieves membership data from the Microsoft SQL Server database"

            name="AspNetSqlMembershipProvider"

              type="System.Web.Security.SqlMembershipProvider" />

        </providers>

      </membership>

<roleManager enabled="true" defaultProvider="AspNetSqlRoleProvider">

          <providers>

            <remove name="AspNetSqlRoleProvider" />

            <add connectionStringName="AspNetSqlProvider"

             applicationName="/"

             description="Stores and retrieves roles data from the local Microsoft SQL Server database"

           name="AspNetSqlRoleProvider"

            type="System.Web.Security.SqlRoleProvider" />

          </providers>

        </roleManager>

 

 

2.<system.web>上面加下以下内容

<connectionStrings>

<remove name="AspNetSqlProvider" />

<add name="AspNetSqlProvider"

connectionString="server=IFM-205/SQLEXPRESS;database=aspnetdb; Integrated Security=True" />

</connectionStrings>

3.把站点改成Form认证即可。

4.把管理中心的Config 也加上以上内容,但是在RoleManager节中,将defaultProvider="AspNetSqlRoleProvider"改成defaultProvider="AspNetWindowsTokenRoleProvider"  OK

 

三.配制自制MemberShip

1.在站点Config中加以下内容:

<membership defaultProvider="TextFileMembershipProvider">

      <providers>

        <add name="TextFileMembershipProvider" type="MOSSSecurity.TextFileMembershipProvider, MOSSSecurity, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9aa04d3327900c65"  filePath="C:/Inetpub/wwwroot/wss/VirtualDirectories/8585/User.txt" />

      </providers>

</membership>

2.在管理中心的配制文件上也要做同样设置

注意:配制站点为Form认证 成员验证提供程序:TextFileMembershipProvider,角色验证提供程序:AspNetSqlRoleProvidertype节点中的MOSSSecurity.TextFileMembershipProvider是程序集的全命名,也就是说MOSSSecurity是程序集的命名空间,TextFileMembershipProvider是程序集的类名。逗号后面的MOSSSecurity,是程序集名称。PublicKeyToken=9aa04d3327900c65"是指程序集的强命名的KEY值。filePath是要找的文件名称及路径。

VersionCulture还没说呢? 生成代码强命名的Dll把它拖到GACC:/Windows/Assembly)中,看它的属性。就知道了。

以下是TextFileMembershipProvider类的代码。它完成功能是去Config中的filePath节指定的路径去找用户名和密码。

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

using System.Web.Security;

using System.IO;

using System.Collections.Specialized;

 

namespace MOSSSecurity

{

    public class TextFileMembershipProvider : MembershipProvider

    {

        private String _sFilePath = "";

 

        public String FilePath

        {

            get { return _sFilePath; }

        }

 

        private IDictionary<String, String> LoadAllUsers()

        {

            if (String.IsNullOrEmpty(this.FilePath))

            {

                throw new InvalidOperationException("FilePath is not set.");

            }

 

            Dictionary<String, String> result = new Dictionary<String, String>();

 

            using (StreamReader reader = new StreamReader(this.FilePath))

            {

                while (true)

                {

                    String sLine = reader.ReadLine();

                    if (sLine == null)

                    {

                        break;

                    }

                    if (sLine.Trim().Length == 0)

                    {

                        continue;

                    }

                    String[] line = sLine.Split(':');

                    result.Add(line[0], line[1]);

                }

            }

 

            return result;

        }

 

        private void WriteAllUsers(IDictionary<String, String> users)

        {

            if (String.IsNullOrEmpty(this.FilePath))

            {

                throw new InvalidOperationException("FilePath is not set.");

            }

 

            using (StreamWriter writer = new StreamWriter(this.FilePath, false))

            {

                foreach (String userId in users.Keys)

                {

                    writer.WriteLine(userId + ":" + users[userId]);

                }

            }

        }

 

        public override void Initialize(string name, NameValueCollection config)

        {

            base.Initialize(name, config);

 

            _sFilePath = config["filePath"];

        }

 

        public override string ApplicationName

        {

            get

            {

                return "/";

            }

            set

            {

 

            }

        }

 

        public override bool ChangePassword(string username, string oldPassword, string newPassword)

        {

            return true;

        }

 

        public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)

        {

            return true;

        }

 

        public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)

        {

            IDictionary<String, String> users = this.LoadAllUsers();

            if (users.ContainsKey(username))

            {

                status = MembershipCreateStatus.DuplicateUserName;

                return null;

            }

 

            users.Add(username, password);

            this.WriteAllUsers(users);

 

            status = MembershipCreateStatus.Success;

 

            MembershipUser user = new MembershipUser(this.Name, username, username, email, passwordQuestion, "", isApproved, false, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);

            return user;

        }

 

        public override bool DeleteUser(string username, bool deleteAllRelatedData)

        {

            IDictionary<String, String> users = this.LoadAllUsers();

            if (users.ContainsKey(username))

            {

                users.Remove(username);

                this.WriteAllUsers(users);

                return true;

            }

            else

            {

                return false;

            }

        }

 

        public override bool EnablePasswordReset

        {

            get { return false; }

        }

 

        public override bool EnablePasswordRetrieval

        {

            get { return false; }

        }

 

        public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)

        {

            totalRecords = 0;

            return null;

        }

 

        public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)

        {

            MembershipUserCollection result = new MembershipUserCollection();

 

            IDictionary<String, String> users = this.LoadAllUsers();

            foreach (String username in users.Keys)

            {

                if (username.StartsWith(usernameToMatch))

                {

                    result.Add(this.GetUser(usernameToMatch, false));

                }

            }

 

            totalRecords = users.Count;

            return result;

        }

 

        public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)

        {

            MembershipUserCollection result = new MembershipUserCollection();

 

            IDictionary<String, String> users = this.LoadAllUsers();

            foreach (String username in users.Keys)

            {

                result.Add(this.GetUser(username, false));

            }

 

            totalRecords = users.Count;

            return result;

        }

 

        public override int GetNumberOfUsersOnline()

        {

            return 0;

        }

 

        public override string GetPassword(string username, string answer)

        {

            return "";

        }

 

        public override MembershipUser GetUser(string username, bool userIsOnline)

        {

            IDictionary<String, String> users = this.LoadAllUsers();

            if (users.ContainsKey(username))

            {

                MembershipUser result = new MembershipUser(this.Name, username, username, "", "", "", true, false, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);

                return result;

            }

            else

            {

                return null;

            }

        }

 

        public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)

        {

            return this.GetUser(providerUserKey.ToString(), userIsOnline);

        }

 

        public override string GetUserNameByEmail(string email)

        {

            return "";

        }

 

        public override int MaxInvalidPasswordAttempts

        {

            get { return 999; }

        }

 

        public override int MinRequiredNonAlphanumericCharacters

        {

            get { return 0; }

        }

 

        public override int MinRequiredPasswordLength

        {

            get { return 1; }

        }

 

        public override int PasswordAttemptWindow

        {

            get { return 999; }

        }

 

        public override MembershipPasswordFormat PasswordFormat

        {

            get { return MembershipPasswordFormat.Clear; }

        }

 

        public override string PasswordStrengthRegularExpression

        {

            get { return ""; }

        }

 

        public override bool RequiresQuestionAndAnswer

        {

            get { return false; }

        }

 

        public override bool RequiresUniqueEmail

        {

            get { return false; }

        }

 

        public override string ResetPassword(string username, string answer)

        {

            return "";

        }

 

        public override bool UnlockUser(string userName)

        {

            return true;

        }

 

        public override void UpdateUser(MembershipUser user)

        {

 

        }

 

        public override bool ValidateUser(string username, string password)

        {

            IDictionary<String, String> users = this.LoadAllUsers();

            if (!users.ContainsKey(username))

            {

                return false;

            }

            if (users[username] != password)

            {

                return false;

            }

 

            return true;

        }

    }

}

 

User.txt内容

admin:password@1

xiao:xiaoep@1

说明:三部分是kaneboy提供的程序  谢谢

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值