基于角色的身份验证3

时间:2022-11-09 00:58:53
数据库表

 
基于角色的身份验证3CREATE  
基于角色的身份验证3
DATABASE  web
基于角色的身份验证3
基于角色的身份验证3
CREATE   TABLE  users
基于角色的身份验证3(
基于角色的身份验证3    username 
nvarchar ( 64 CONSTRAINT  users_PK  PRIMARY   KEY ,
基于角色的身份验证3    password 
nvarchar ( 128 ),
基于角色的身份验证3    roles 
nvarchar ( 64 )
基于角色的身份验证3)
基于角色的身份验证3
基于角色的身份验证3
CREATE   INDEX  credentials  ON  users
基于角色的身份验证3(
基于角色的身份验证3    username,
基于角色的身份验证3    password
基于角色的身份验证3)
内容
 格式
 
username  |password      |roles
"hstewart"|"codeproject" |"Administrator,User"
"joe"     |"schmoe"      |"User"

web.config 的设置  
 
基于角色的身份验证3<? xml version="1.0" encoding="utf-8"  ?>
基于角色的身份验证3
< configuration >
基于角色的身份验证3    
基于角色的身份验证3  
< system .web >
基于角色的身份验证3
基于角色的身份验证3  
基于角色的身份验证3    
< compilation 
基于角色的身份验证3         
defaultLanguage ="c#"
基于角色的身份验证3         debug
="true"
基于角色的身份验证3    
/>
基于角色的身份验证3
基于角色的身份验证3   
基于角色的身份验证3    
< customErrors 
基于角色的身份验证3    
mode ="RemoteOnly"  
基于角色的身份验证3    
/>  
基于角色的身份验证3
基于角色的身份验证3   
基于角色的身份验证3 
< authentication  mode ="Forms" >
基于角色的身份验证3            
< forms  name ="MYWEBAPP.ASPXAUTH"
基于角色的身份验证3                loginUrl
="login.aspx"
基于角色的身份验证3                protection
="All"
基于角色的身份验证3                path
="/" />
基于角色的身份验证3        
</ authentication >
基于角色的身份验证3        
< authorization >
基于角色的身份验证3              
< allow  users ="*" />
基于角色的身份验证3        
</ authorization >
基于角色的身份验证3
基于角色的身份验证3    
< trace
基于角色的身份验证3        
enabled ="false"
基于角色的身份验证3        requestLimit
="10"
基于角色的身份验证3        pageOutput
="false"
基于角色的身份验证3        traceMode
="SortByTime"
基于角色的身份验证3        localOnly
="true"
基于角色的身份验证3    
/>
基于角色的身份验证3
基于角色的身份验证3    
基于角色的身份验证3    
< sessionState 
基于角色的身份验证3            
mode ="InProc"
基于角色的身份验证3            stateConnectionString
="tcpip=127.0.0.1:42424"
基于角色的身份验证3            sqlConnectionString
="data source=127.0.0.1;Trusted_Connection=yes"
基于角色的身份验证3            cookieless
="false"  
基于角色的身份验证3            timeout
="20"  
基于角色的身份验证3    
/>
基于角色的身份验证3
基于角色的身份验证3    
< globalization 
基于角色的身份验证3            
requestEncoding ="utf-8"  
基于角色的身份验证3            responseEncoding
="utf-8"  
基于角色的身份验证3   
/>
基于角色的身份验证3   
基于角色的身份验证3 
</ system.web >
基于角色的身份验证3
< location  path ="administrators" >
基于角色的身份验证3        
< system .web >
基于角色的身份验证3            
< authorization >
基于角色的身份验证3                
<!--  Order and case are important below  -->
基于角色的身份验证3                
< allow  roles ="Administrator" />
基于角色的身份验证3                
< deny  users ="*" />
基于角色的身份验证3            
</ authorization >
基于角色的身份验证3        
</ system.web >
基于角色的身份验证3    
</ location >
基于角色的身份验证3    
< location  path ="users" >
基于角色的身份验证3        
< system .web >
基于角色的身份验证3            
< authorization >
基于角色的身份验证3                
<!--  Order and case are important below  -->
基于角色的身份验证3                
< allow  roles ="User" />
基于角色的身份验证3                
< deny  users ="*" />
基于角色的身份验证3            
</ authorization >
基于角色的身份验证3        
</ system.web >
基于角色的身份验证3    
</ location >
基于角色的身份验证3
</ configuration >
基于角色的身份验证3
 

    

Global.asax

基于角色的身份验证3     protected   void  Application_AuthenticateRequest(Object sender, EventArgs e)
基于角色的身份验证3基于角色的身份验证3        
{
基于角色的身份验证3            
if (HttpContext.Current.User != null)
基于角色的身份验证3基于角色的身份验证3            
{
基于角色的身份验证3                
if (HttpContext.Current.User.Identity.IsAuthenticated)
基于角色的身份验证3基于角色的身份验证3                
{
基于角色的身份验证3                    
if (HttpContext.Current.User.Identity is FormsIdentity)
基于角色的身份验证3基于角色的身份验证3                    
{
基于角色的身份验证3                        FormsIdentity id 
=
基于角色的身份验证3                            (FormsIdentity)HttpContext.Current.User.Identity;
基于角色的身份验证3                        FormsAuthenticationTicket ticket 
= id.Ticket;
基于角色的身份验证3
基于角色的身份验证3                        
// Get the stored user-data, in this case, our roles
基于角色的身份验证3
                        string userData = ticket.UserData;
基于角色的身份验证3                        
string[] roles = userData.Split(',');
基于角色的身份验证3                        HttpContext.Current.User 
= new GenericPrincipal(id, roles);
基于角色的身份验证3                    }

基于角色的身份验证3                }

基于角色的身份验证3            }

基于角色的身份验证3
基于角色的身份验证3        }
上边的难证代码和下边是一样的,有兴趣可以看一下。。。。 

 
基于角色的身份验证3 System.Web .HttpApplication  app = ((HttpApplication)sender);
基于角色的身份验证3           System.Web.HttpContext  ctx
= app.Context;
基于角色的身份验证3            
if  (ctx.Request .IsAuthenticated)
   



     login.aspx 
  
基于角色的身份验证3private   void  Button1_Click( object  sender, System.EventArgs e)
基于角色的身份验证3基于角色的身份验证3        
{
基于角色的身份验证3            
// Initialize FormsAuthentication, for what it's worth
基于角色的身份验证3
            FormsAuthentication.Initialize();
基于角色的身份验证3
基于角色的身份验证3            
// Create our connection and command objects
基于角色的身份验证3
            SqlConnection conn =
基于角色的身份验证3                
new SqlConnection("server=localhost;database=web;User ID=sa;password=");
基于角色的身份验证3            SqlCommand cmd 
= conn.CreateCommand();
基于角色的身份验证3            cmd.CommandText 
= "SELECT roles FROM users WHERE username=@username " +
基于角色的身份验证3                
"AND password=@password";
基于角色的身份验证3
基于角色的身份验证3            
// Fill our parameters
基于角色的身份验证3
            cmd.Parameters.Add("@username", SqlDbType.NVarChar, 64).Value =
基于角色的身份验证3                Username.Text;
基于角色的身份验证3            cmd.Parameters.Add(
"@password", SqlDbType.NVarChar, 128).Value =
基于角色的身份验证3                Password.Text; 
// Or "sha1"
基于角色的身份验证3
基于角色的身份验证3            
// Execute the command
基于角色的身份验证3
            conn.Open();
基于角色的身份验证3            SqlDataReader reader 
= cmd.ExecuteReader();
基于角色的身份验证3            
if (reader.Read())
基于角色的身份验证3基于角色的身份验证3            
{
基于角色的身份验证3                
// Create a new ticket used for authentication
基于角色的身份验证3
                FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(
基于角色的身份验证3                    
1// Ticket version
基于角色的身份验证3
                    Username.Text, // Username associated with ticket
基于角色的身份验证3
                    DateTime.Now, // Date/time issued
基于角色的身份验证3
                    DateTime.Now.AddMinutes(30), // Date/time to expire
基于角色的身份验证3
                    true// "true" for a persistent user cookie
基于角色的身份验证3
                    reader.GetString(0), // User-data, in this case the roles
基于角色的身份验证3
                    FormsAuthentication.FormsCookiePath);// Path cookie valid for
基于角色的身份验证3
基于角色的身份验证3                
// Encrypt the cookie using the machine key for secure transport
基于角色的身份验证3
                string hash = FormsAuthentication.Encrypt(ticket);
基于角色的身份验证3                HttpCookie cookie 
= new HttpCookie(
基于角色的身份验证3                    FormsAuthentication.FormsCookieName, 
// Name of auth cookie
基于角色的身份验证3
                    hash); // Hashed ticket
基于角色的身份验证3
基于角色的身份验证3                
// Set the cookie's expiration time to the tickets expiration time
基于角色的身份验证3
                if (ticket.IsPersistent) cookie.Expires = ticket.Expiration;
基于角色的身份验证3
基于角色的身份验证3                
// Add the cookie to the list for outgoing response
基于角色的身份验证3
                Response.Cookies.Add(cookie);
基于角色的身份验证3
基于角色的身份验证3                
// Redirect to requested URL, or homepage if no previous page
基于角色的身份验证3                
// requested
基于角色的身份验证3
                string returnUrl = Request.QueryString["ReturnUrl"];
基于角色的身份验证3                
if (returnUrl == null) returnUrl = "/";
基于角色的身份验证3
基于角色的身份验证3                
// Don't call FormsAuthentication.RedirectFromLoginPage since it
基于角色的身份验证3                
// could
基于角色的身份验证3                
// replace the authentication ticket (cookie) we just added
基于角色的身份验证3
                Response.Redirect(returnUrl);
基于角色的身份验证3            }

基于角色的身份验证3            
else
基于角色的身份验证3基于角色的身份验证3            
{
基于角色的身份验证3                
// Never tell the user if just the username is password is incorrect.
基于角色的身份验证3                
// That just gives them a place to start, once they've found one or
基于角色的身份验证3                
// the other is correct!
基于角色的身份验证3
                ErrorLabel.Text = "Username / password incorrect. Please try again.";
基于角色的身份验证3                ErrorLabel.Visible 
= true;
基于角色的身份验证3            }

基于角色的身份验证3
基于角色的身份验证3            reader.Close();
基于角色的身份验证3            conn.Close();
基于角色的身份验证3        }


在根目录下建 
administrators  目录
users          目录

 两个目录下分别建调用页面 

 调用页面内容
 

基于角色的身份验证3   private   void  Page_Load( object  sender, System.EventArgs e)
基于角色的身份验证3基于角色的身份验证3  
{
基于角色的身份验证3   
// 在此处放置用户代码以初始化页面
基于角色的身份验证3

基于角色的身份验证3   
if (User.IsInRole("Administrator"))
基于角色的身份验证3    
this.Response .Write ("Administrator"); 
基于角色的身份验证3   
if (User.IsInRole ("User"))
基于角色的身份验证3    
this.Response .Write ("User");
基于角色的身份验证3
基于角色的身份验证3  }

基于角色的身份验证3
基于角色的身份验证3

   

  
  转自

 http://www.codeproject.com/aspnet/formsroleauth.asp