Authentication(认证)和Authorization(授权)
<Authentication>认证
1.理论理解:
在web.config文件中,<system.web>/<authentication>配置节用于验证进行配置。为<authentication>节点提供mode="Forms"属性可以启用FormsAuthentication.
<authentication>配置节点的解析
默认: <authentication mode="Forms">
<forms name=".ASPXAUTH" loginUrl="login.aspx" defaultUrl="default.aspx" protection="ALL" timeout="30" path="/" requireSSL="false" slidingExpiration="false" enableCrossAppRedirectd="false" cookiess="UseDeviceProfile" domain=""/>
</autnentication>
注意:当上面这些属性不需要修改时,则可以省略。
解析:name—Cookie的名字。FormsAuthentication可能会在验证后将用户凭证放在Cookie中,name属性决定了该Cookie的名字,通过FormAuthentication.FormsCookieName属性可以得到该配置值。
loginUrl—登录页的URL.通过FormsAuthentication.LoginUrl属性可以得到该值。FormsAuthentication.RedirectToLogin()方法时,客户端请求将被重定向到该属性所指定的页面。
protetction—Cookie的保护模式。
defaultUrl—默认的Url.
timeout—Cookie的过期时间。
path—Cookie的路径。
这些都是使用FormsAuthentication类。
FormsAuthentication类用于辅助我们完成窗体验证,并进一步完成用户登录等功能。该类位于system.web.dll程序集的System.Web.Security命名空间中。通常在Web站点项目中可以直接使用这个类,如果是在类库项目中使用这个类,请确保引用了system.web.dll。
前一节已经介绍了FormsAuthentication类的所有属性。这一节将介绍该类少数几个常用的方法。
RedirectToLoginPage方法用于从任何页面重定向到登录页,该方法有两种重载方式:
public static void RedirectToLoginPage ()
public static void RedirectToLoginPage (string extraQueryString)
两种方式均会使浏览器重定向到登录页(登录页的URL由<forms>节点的loginUrl属性指出)。第二种重载方式还能够提供额外的查询字符串。
RedirectToLoginPage通常在任何非登录页的页面中调用。该方法除了进行重定向之外,!!/**还会向URL中附加一个ReturnUrl参数,该参数即为调用该方法时所在的页面 的URL 地址。这是为了方便登录后能够自动回到登录前所在的页面。**/
RedirectFromLoginPage方法用于从登录页跳转回登录前页面。这个“登录前”页面即由访问登录页时提供的ReturnUrl参数指定。如果没有提供ReturnUrl参数(例如,不是 使用RedirectToLoginPage方法而是用其他手段重定向到或直接访问登录页时),则该方法会自动跳转到由<forms>节点的defaultUrl属性所指定的默认页。
此外,如果<forms>节点的enableCrossAppRedirects属性被设置为false,ReturnUrl参数所指定的路径必须是当前Web应用程序中的路径,否则(如提供其他站点下的路径 )也将返回到默认页。
RedirectFromLoginPage方法有两种重载形式:
public static void RedirectFromLoginPage
(string userName, bool createPersistentCookie)
public static void RedirectFromLoginPage
(string userName, bool createPersistentCookie, string strCookiePath)
userName参数表示用户的标识(如用户名、用户ID等);createPersistentCookie参数表示是否“记住我”;strCookiePath参数表示Cookie路径。
RedirectFromLoginPage方法除了完成重定向之外,还会将经过加密(是否加密取决于<forms>节点的protection属性)的用户凭据存放到Cookie或Uri中。在后续访问中, 只要Cookie没有过期,则将可以通过HttpContext.User.Identity.Name属性得到这里传入的userName属性。
它还有一Signout方法,用于完成用户注销。其原理是从Cookie或Uri中移除用户凭据。
2.实践操作步骤
(1)不需要web.config文件.
新建login.aspx 、default.aspx 、logout.aspx 、GotoUrl
在login.aspx中,前台写入<form></form>,在后台中的代码为:
FormsAuthenticationTicket Ticket=new FormsAuthenticationTicket(int version,string name,DateTime issueDate DateTime expiration,bool isPersistent,string userData);--使用 版本、Cookie 名、过期日期、发布日期、持久性以及用户特定的数据初始化
string hasTicket=FormsAuthentication.Encrypt(Ticket)
HttpCookie UserCookie=new HttpCookie(FormsAuthentication.FormCookieName,hasTicket);
Context.Response.Cookie.Add(UserCookie)
Response.Redirect("GotoUrl.aspx?returnUrl=" + Server.UrlEncode("Default.aspx"));//重定向并带有返回的URL
在Default.aspx中,输入的代码为:
Response.Write("<span style='color:red'>"+User.identity.Name+"</span>已登录!");
if(User.identity.IsAuthenticated)—————判断用户是否已经登录
在logout.aspx中,输入代码为:
FormsAuthentication.SignOut();
Response.Redirect("default.aspx");
(2)需要web.config文件.
<system.web>
<authentication mode="Forms">
<forms loginUrl="登录页面" timeout="到期时间" name="Cookie的名字"defaultUrl="默认的Url,会重定向"/>--相当于配置参数和声明。
</authentication>
</system.web>
则,既可以在登录界面里使用FormsAuthentication.SetAuthCookie("UserName",bool)--将用户名存在上述中name为"Cookie的名字".bool-为跨浏览器保存cookie。
然后使用User.identity.Name——获取用户名。User.identity.IsAuthenticated判断是否有用户登录。
<Authorization>授权
在web.config文件中,使用<Authorization>进行授权。
(1)<system.web>
<authorization>
<deny users="?" />
<authorization>
</system.web>---表示拒绝所有匿名用户访问。
(2)<location path="文件夹名或者文件名">
<system.web>
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>--------该文件或者文件夹允许所有用户访问。
重要!重要!重要!
当设置不许匿名用户访问时,当未登录时(一定要当前登录),访问上面时Default.aspx时,回调到登录页面,会有URL:http://localhost:15044/login.aspx?ReturnUrl=%2fdefault.aspx 会有ReturnUrl.即在登录前访问了哪个页面。
然而,当没有使用授权时,则可以访问页面,也不会有URL
浙公网安备 33010602011771号