• petshop4.0学习记录一:Memebership的使用 dodo


    membership介绍:
    Asp.netmembership提供了一种存储,验证和管理用户信息以及权限的统一的路径。membership所对应的验证方式是asp.netForms身份验证(注:asp.net的身份验证方式 有好几种包括windows身份验证 Forms身份验证 Passport身份认证当然还有就是没有验证)。在vs2005 还给membership提供了一系列的控件(login控件),能方便的在asp.net实现membership

    membership能实现的功能:
        1.  创建用户
       
    2.  可以保存membership信息在sql server,Active Directory以及其他的一些数据保存方法
       
    3.  鉴别谁在访问你的网站。如果使用login控件,几乎可以在不写代码的情况下完成。
       
    4.  管理密码。包括 创建 修改 重置
       
    5.  创建一个唯一的值来标志每一个登陆用户,可以实现对用户的个性化以及角色管理。
       
    6.  提供一个用户自定义的membership provider,从而实现一些自己网站特有的数据的保存和管理。

    membership的使用:

    1、配置表单认证

    要实现表单认证需要设置<authentication>mode属性为"Forms",然后按照下面的例子配置web.config文件

    <authentication mode="Forms">

    <forms loginUrl="Login.aspx"

    protection="All"

    timeout="30"

    name="AppNameCookie"

    path="/FormsAuth"

    requireSSL="false"

    slidingExpiration="true"

    defaultUrl="default.aspx"

    cookieless="UseCookies"

    enableCrossAppRedirects="false"/>

    </authentication>

    · loginUrl 指向登录页面,你需要把它放在支持SSL的目录下

    · Protection 设置成"All"表示为认证凭据同时启用数据来源验证和加密

    · Timeout 指定了认证的生存时间

    · name and path are set to unique values for the current application.

    · requireSSL 设置成"false"表示关闭cookieSSL加密

    · slidingExpiration 如果设置成"true"的话,每次访问过期时间将会重置

    · defaultUrl 就是设置程序的首页

    · cookieless 设置成"UseCookies"表示使用cookie来传递认证票据

    · enableCrossAppRedirects 设置成"false"表示程序不接受外部的请求

    按照下面的例子为<authentication> 增加<authorization>块,表明只有登录过的用户才能进入程序否则会被转到前面loginUrl设置的页面

    <authorization>

    <deny users="" />

    <allow users="*" />

    </authorization>


    2.安装membership数据库

    在使用SqlMembershipProvider以前需要安装一个membership数据库,使用一个SQL SERVER管理员权限登录到服务器,然后在Visual Studio 2005命令行模式下执行下面的语句

    aspnet_regsql.exe -E -S localhost -A m

    看下几个参数:

    -E 表明此帐号使用windows集成认证

    -S 表明需要安装数据库的服务器名

    -A m 表明自动为membership建立相应的表和存储过程

    注意:Aspnet_regsql 工具同样为其他ASP.NET 2.0特性安装数据库,比如说成员管理,Profile,个性化Web Parts还有Web Events等,当然都会有其他的命令,如果你不使用任何参数的话可以以想到模式运行程序,会允许你在安装的过程中指定数据库服务器和你需要安装的组件

    3、配置SqlMembershipProvider

    Machine.config其实默认就是使用SQL Server Express作为SqlMembershipProvider的,如果你的数据库不是运行在本机的,可以修改下配置

    <connectionStrings>

    <add name="MySqlConnection" connectionString="Data Source=MySqlServer;Initial Catalog=aspnetdb;Integrated Security=SSPI;" />

    </connectionStrings>

    <system.web>

    ...

    <membership defaultProvider="SqlProvider" userIsOnlineTimeWindow="15">

    <providers>

    <clear />

    <add

    name="SqlProvider"

    type="System.Web.Security.SqlMembershipProvider"

    connectionStringName="MySqlConnection"

    applicationName="MyApplication"

    enablePasswordRetrieval="false"

    enablePasswordReset="true"

    requiresQuestionAndAnswer="true"

    requiresUniqueEmail="true"

    passwordFormat="Hashed" />

    </providers>

    </membership>

    SqlMembershipProvider属性配置

    属性

    默认

    用途

    connectionStringName

    SQL SERVER的连接字符串

    enablePasswordReset

    False

    密码能否重置
    安全原因,只有当
    requiresQuestionAndAnswer
    设置为 true的时候你才可以设置enablePasswordResettrue

    requiresQuestionAnd
    Answer

    False

    是否需要启用取回密码

    applicationName

    /

    设置了它可以让多个应用程序在数据库内有所区分,不需要为每个应用建立一个数据库了

    requiresUniqueEmail

    False

    邮件地址是否需要唯一

    maxInvalidPassword
    Attempts

    5

    密码输入错误几次就会锁定用户

    passwordAttempt
    Window

    10

    每分钟可以失败的次数

    passwordFormat

    密码方式 Clear, Encrypted, Hashed. 第一种是明文存储,效率比较高,但是SQL SERVER中能直接读取密码,不安全. 第二种是不可逆加密,需要一定的加密换算过程,但是比较安全.第三种是可逆加密,密码不能找回

    minRequiredPassword
    Length

    7

    指定至少密码需要几位

    minRequiredNonAlpha
    numericCharacters

    1

    指定需要是非数字字母作为密码的位数,不能大于minRequiredPassword
    Length

    passwordStrength
    RegularExpression

    ""

    指定强度计算的正则表达式

    通俗说法:
    defaultProvider : 默认数据提供程序
    connectionStringName : 数据库连接字符串节点的key

    applicationName : 使用该membership的程序名称
    description : 描述信息
    minRequiredPasswordLength : 密码最少 多少位
    minRequiredNonalphanumericCharacters : 必须包含多少个特殊字符
    requiresUniqueEmail : 注册时是否需要email唯一.
    enablePasswordRetrieval : 允许找回密码否
    enablePasswordReset : 允许修改密码否
    requiresQuestionAndAnswer :  注册时是否必须填写密码我问题和答案
    passwordFormat : 密码加密方式
    name : 名称
    type : 类的命名空间

    4、建立用户:

    可以使用下面的几种方法新建用户

    · 打开vs.net2005Website菜单,点击ASP.NET Configuration,然后在安全里面进行设置

    · 建立一个ASP.NET页面,放入一个CreateUserWizard控件,这个控件使用配置过的membership provider来实现建立用户的过程

    · 手动拖放填写用户名和密码的文本框然后使用Membership APICreateUser方法来实现

    注意:其实所有这些方法最终还是使用Membership.CreateUser来建立用户

    默认配置的ActiveDirectoryMembershipProvider使用UPNs来进行名字印象,如下

    attributeMapUsername="userPrincipalName"

    因为所有用户名都需要按照下面的格式:

    UserName@DomainName

    如果手动使用Membership.CreateUser方法来创建用户,这么做

    Membership.CreateUser("UserName@DomainName", "P@ssw0rd", "userName@emailAddress");

    你也能设置config文件来改变映象方式:

    attributeMapUsername="sAMAccountName"

    如果这样设置的话,用户名就如下格式:

    UserName

    这样建立用户:

    Membership.CreateUser("UserName", "P@ssw0rd", "userName@emailAddress")

    注意:你可以设置requiresUniqueEmail"true"来确保所有用户的mail地址不重复

    5、认证用户

    要认证用户,你必须要建立一个登录页面,而它也就是唯一不需要验证的页面

    可以使用以下方法建立登录页面:

    l 用ASP.NET 2.0登录控件,这个控件几乎包含了所有涉及到的操作,它会自动连接配置过的membership provider,不需要写任何代码,登录以后控件可以保存用户信息,比如用加密过的cookie保存。

    l 当然你也可以手动来用文本框完成这个过程,可以利用Membership ValidateUser来判断登录情况,登录完成后你还需要用FormsAuthentication类来为用户的浏览器写入cookie,下面是例子:

    if (Membership.ValidateUser(userName.Text, password.Text))

    {

    if (Request.QueryString["ReturnUrl"] != null)

    {

    FormsAuthentication.RedirectFromLoginPage(userName.Text, false);

    }

    else

    {

    FormsAuthentication.SetAuthCookie(userName.Text, false);

    }

    }

    else

    {

    Response.Write("Invalid UserID and Password");

    }

    注意:上面两种方式都是使用Membership.CreateUser方法

    bool isValidUser = Membership.ValidateUser("UseName@DomainName", "P@ssw0rd");

    attributeMapUsername="sAMAccountName"

    bool isValidUser = Membership.ValidateUser("UserName", "P@ssw0rd", "userName@emailAddress")

    附:Membership类说明

    Membership类重要的一些方法参数和用法

    方法名

    参数

    备注

    CreateUser

    string username创建的用户名.
    string password
    新用户密码
    string email
    新用户mail地址
    string passwordQuestion
    string passwordAnswer
    bool IsApproved
    object providerUserKey

    DeleteUser

    string username需要删除的用户名
    bool removeAllRelatedData

    返回true表示删除,false表示没有找到

    FindUsersByName

    string usernameToMatch
    int pageIndex
    int pageSize

    返回找到的用户的集合,支持通配符 "*", "%" "_".

    FindUsersByEmail

    string emailToMatch
    int pageIndex
    int pageSize

    GeneratePassword

    int length
    Int numberOfNonAlpha
    NumericCharacters

    GetAllUsers

    int pageIndex
    int pageSize

    返回用户记录集

    GetNumberOfUsersOnline

    None

    返回在线的用户,活动目录不支持

    GetUsernameByEmail

    string email需要查找的用户的mail地址

    UpdateUser

    MembershipUser user需要更新的用户名

    ValidateUser

    string username需要验证的用户名
    string password
    需要验证的密码

    注意 GetAllUsers 方法在 RTM 版本的 .NET Framework 2.0 会取消

    特别注意

    默认情况下表单认证的票据传输是明文的,为了防止票据被盗窃,我们还是建议你为服务器启用SSL。设置requireSSL属性为true来启用SSL,下面的例子显示了怎么启用SSL,还有不管用户使用http还是https形式的url进入网站都能启用,你可以尝试登录到loginUrl指定的页面看看,但是需要保证这个页面是没有任何约束的

    <configuration>

    <system.web>

    <authentication mode="Forms">

    <forms loginUrl="https://myserver/mywebapp/secure/Login.aspx"

    protection="All"

    timeout="30"

    name="AppNameCookie"

    path="/FormsAuth"

    requireSSL="true"

    slidingExpiration="true"

    defaultUrl="default.aspx"

    cookieless="UseCookies"

    enableCrossAppRedirects="false"/>

    </authentication>

    <!—禁止没有权限的用户 -->

    <authorization>

    <deny users="" />

    <allow users="*" />

    </authorization>

    </system.web>

    </configuration>

    <!—使得登录页面没有任何限制 -->

    <location path="secure">

    <system.web>

    <authorization>

    <allow users="*" />

    </authorization>

    </system.web>

    </location>




  • 相关阅读:
    完全背包
    二分求值(二分适合求答案在两个数之间的题目)
    set<pair<int,int> >的用法
    01背包 (dp专题)
    矩阵快速幂
    BZOJ1977 [BeiJing2010组队]次小生成树 Tree
    BZOJ1854 [Scoi2010]游戏
    BZOJ1054 [HAOI2008]移动玩具
    NOIP系列复习及题目集合
    BZOJ2708 [Violet 1]木偶
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/657611.html
Copyright © 2020-2023  润新知