asp.NetForms認証とロールベースの権限アクセス
7410 ワード
主な思想:Forms認証は合法的なユーザーかどうかを判断するために使用され、ユーザーが合法的になった後、ユーザーの役割を通じてアクセスできるページを決定する.
具体的な手順:
1、ウェブサイトを作成して、構造は以下の通りです.
Webサイトのルート
Adminディレクトリ---->管理者ディレクトリ
Manager.aspx------>管理者がアクセスできるページ
Usersディレクトリ---->ユーザーディレクトリの登録
Welcome.aspx------>登録ユーザーがアクセスできるページ
Errorディレクトリ---->エラーメッセージディレクトリ
AccessError.htm------>エラーメッセージページへのアクセス
default.aspx------>Webサイトのデフォルトページ
login.aspx------>サイト登録ページ
web.config------>Webサイトのプロファイル
2、webを配置する.configは以下の通りです.
データ:
次のように3人のユーザーがいるとします.
------------------------------------------
ユーザー名パスワードロール文字列
------------------------------------------
sa sa Admin,User
admin admin Admin
user user User
------------------------------------------
テスト:
adminログインを使用する場合、AdminディレクトリのManagerのみにアクセスできます.aspxページ;
userを使用してログインすると、UsersディレクトリのWelcomeにしかアクセスできません.aspxページ;
saログインを使用すると、AdminディレクトリのManagerにアクセスできます.Aspxページ、またUsersディレクトリのWelcomeにアクセスできます.aspxページ.
注意:テスト時に安全終了ボタンをクリックすることに注意してください.そうしないと、テスト結果に影響します.
具体的な手順:
1、ウェブサイトを作成して、構造は以下の通りです.
Webサイトのルート
Adminディレクトリ---->管理者ディレクトリ
Manager.aspx------>管理者がアクセスできるページ
Usersディレクトリ---->ユーザーディレクトリの登録
Welcome.aspx------>登録ユーザーがアクセスできるページ
Errorディレクトリ---->エラーメッセージディレクトリ
AccessError.htm------>エラーメッセージページへのアクセス
default.aspx------>Webサイトのデフォルトページ
login.aspx------>サイト登録ページ
web.config------>Webサイトのプロファイル
2、webを配置する.configは以下の通りです.
3、login.aspxページのログイン部分コードは以下の通りです.
protected void btnLogin_Click(object sender, EventArgs e)
{
//Forms
FormsAuthentication.Initialize();
// ,txtName ,txtPassword
UserModel um = ValidUser(txtName.Text.Trim(),txtPassword.Text.Trim());
if (um != null)
{
//
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
um.Name,
DateTime.Now,
DateTime.Now.AddMinutes(30),
true,
um.Roles,//
FormsAuthentication.FormsCookiePath);
//
string hash = FormsAuthentication.Encrypt(ticket);
// cookie
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash);
if (ticket.IsPersistent)
{
cookie.Expires = ticket.Expiration;
}
// cookie
Response.Cookies.Add(cookie);
//
Response.Redirect(FormsAuthentication.GetRedirectUrl(um.Name,false));
}
else
{
ClientScriptManager csm = this.Page.ClientScript;
csm.RegisterStartupScript(this.GetType(), "error_tip", "alert(' ! !');", true);
}
}
//
private UserModel ValidUser(string name, string password)
{
return new UserService().Validate(name, password);
}
4、ウェブサイトに処理プログラムGlobalを追加する.一般的な認証コードは次のとおりです.
// User,
protected void Application_AuthenticateRequest(object sender, EventArgs e)
{
if (HttpContext.Current.User != null )
{
if (HttpContext.Current.User.Identity.IsAuthenticated)
{
if (HttpContext.Current.User.Identity is FormsIdentity)
{
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
FormsAuthenticationTicket ticket = id.Ticket;
string userData = ticket.UserData;
string[] roles = userData.Split(',');
// HttpContext.Current.User,
HttpContext.Current.User = new GenericPrincipal(id, roles);
}
}
}
}
5、AdminディレクトリでManager.aspxページのロードコードは次のとおりです.
protected void Page_Load(object sender, EventArgs e)
{
//
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
// Admin
if (!id.Ticket.UserData.Contains("Admin"))
{
//
Response.Redirect("~/Error/AccessError.htm", true);
}
}
//
protected void btnExit_Click(object sender, EventArgs e)
{
//
FormsAuthentication.SignOut();
ClientScriptManager csm = this.Page.ClientScript;
csm.RegisterStartupScript(this.GetType(), "exit_tip", "alert(' !');", true);
}
6、Usersディレクトリの中でWelcome.aspxページのロードコードは次のとおりです.
protected void Page_Load(object sender, EventArgs e)
{
//
FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
// User
if (!id.Ticket.UserData.Contains("User"))
{
//
Response.Redirect("~/Error/AccessError.htm", true);
}
}
//
protected void btnExit_Click(object sender, EventArgs e)
{
//
FormsAuthentication.SignOut();
ClientScriptManager csm = this.Page.ClientScript;
csm.RegisterStartupScript(this.GetType(), "exit_tip", "alert(' !');", true);
}
テスト結果:データ:
次のように3人のユーザーがいるとします.
------------------------------------------
ユーザー名パスワードロール文字列
------------------------------------------
sa sa Admin,User
admin admin Admin
user user User
------------------------------------------
テスト:
adminログインを使用する場合、AdminディレクトリのManagerのみにアクセスできます.aspxページ;
userを使用してログインすると、UsersディレクトリのWelcomeにしかアクセスできません.aspxページ;
saログインを使用すると、AdminディレクトリのManagerにアクセスできます.Aspxページ、またUsersディレクトリのWelcomeにアクセスできます.aspxページ.
注意:テスト時に安全終了ボタンをクリックすることに注意してください.そうしないと、テスト結果に影響します.