ASP.NET Core 2.0身份和角色管理入門
目錄
步驟3:在Startup.cs檔案中新增Identity Service
Download ASPNETCoreUserIdentity - 1.5 MB
介紹
在本文中,我們將詳細介紹如何在MVC應用程式中使用ASP.NET Core Identity來建立使用者角色並根據使用者角色顯示選單。
在這裡,我們將看到如何做:
- 建立預設管理員使用者
- 建立預設管理員角色
- 將未經身份驗證的使用者重定向到登入頁面
- 僅為授權管理員使用者顯示管理頁面選單
ASP.NET Identity允許我們為系統新增登入功能。在這個演示中,我們將使用SQL Server來儲存使用者詳細資訊和配置檔案資料。我們將使用ASP.NET Identity進行新使用者註冊,登入以及維護使用者配置檔案資料。如果我們談論登入,重要的部分是登入使用者是否經過身份驗證並且是否有權檢視頁面。
身份驗證和授權
身份驗證
檢查有效使用者。這裡的問題是如何檢查使用者是否有效。當用戶第一次訪問網站時,他/她將註冊該網站。他們所有的資訊,如使用者名稱,密碼,電子郵件等都將儲存在網站資料庫中。當用戶輸入他/她的使用者ID和密碼時,將使用資料庫檢查資訊。如果使用者輸入了與資料庫中相同的使用者ID和密碼,則他或她是有效使用者,並將被重定向到網站的主頁。如果使用者輸入的UserID或密碼與資料庫不匹配,則登入頁面將顯示一條訊息,例如“請輸入有效的使用者名稱或密碼”。檢查使用者是否有效訪問網站的整個過程稱為身份驗證。
授權
使用者通過身份驗證後,需要通過他/她的角色將其重定向到相應的頁面。例如,當管理員登入時,則需要重定向到管理頁面。如果會計師已登入,則需要將他
背景
先決條件
確保已安裝計算機中的所有先決條件。如果沒有,那麼一個接一個地下載並安裝它們。
- 首先,從此連結下載並安裝Visual Studio 2017
- SQL Server 2014或更高版本
使用程式碼
第1步:建立資料庫
首先,我們將建立一個數據庫,並使用我們的新資料庫連線在appsettings.json 檔案中設定連線字串 DefaultConnection。我們將使用此資料庫建立ASP.NET Core Identity表。
建立資料庫:執行以下指令碼以建立我們的資料庫。
USE MASTER
GO
-- 1) Check for the Database Exists .If the database is exist then drop and create new DB
IF EXISTS (SELECT [name] FROM sys.databases WHERE [name] = 'InventoryDB' )
DROP DATABASE InventoryDB
GO
CREATE DATABASE InventoryDB
GO
USE InventoryDB
GO
執行資料庫指令碼後,我們可以看到已建立資料庫並且尚未建立表。
第2步:建立ASP.NET Core
安裝Visual Studio 2017後,單擊“開始”,然後單擊“程式”,選擇“ Visual Studio 2017”——單擊“ Visual Studio 2017”。單擊New,然後單擊Project,選擇Web,然後選擇 ASP.NET Core Web Application。輸入您的專案名稱並單擊。
選擇Web應用程式(模型-檢視-控制器),然後單擊“更改身份驗證”。
選擇個人使用者帳戶,然後單擊確定以建立專案。
更新appsettings.json
在appsettings.json檔案中,我們可以找到 DefaultConnection 連線字串。在連線字串中,更改你的SQL Server名稱,UID和PWD以在一個數據庫中建立和儲存所有使用者詳細資訊。
"ConnectionStrings": {
"DefaultConnection": "Server= YOURSERVERNAME;Database=InventoryDB;
user id= YOURSQLUSERID;password=YOURSQLPASSWORD;Trusted_Connection=True;
MultipleActiveResultSets=true"
},
步驟3:在Startup.cs檔案中新增Identity Service
預設情況下,在ASP.NET Core應用程式中,Identity Service將新增到Startup.cs檔案中的 ConfigureServices方法中。您還可以在使用者註冊時另外新增密碼強度,還可以使用以下程式碼設定預設登入頁/登出頁以及AccessDenaiedPath。
services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders();
//Password Strength Setting
services.Configure<IdentityOptions>(options =>
{
// Password settings
options.Password.RequireDigit = true;
options.Password.RequiredLength = 8;
options.Password.RequireNonAlphanumeric = false;
options.Password.RequireUppercase = true;
options.Password.RequireLowercase = false;
options.Password.RequiredUniqueChars = 6;
// Lockout settings
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30);
options.Lockout.MaxFailedAccessAttempts = 10;
options.Lockout.AllowedForNewUsers = true;
// User settings
options.User.RequireUniqueEmail = true;
});
//Setting the Account Login page
services.ConfigureApplicationCookie(options =>
{
// Cookie settings
options.Cookie.HttpOnly = true;
options.ExpireTimeSpan = TimeSpan.FromMinutes(30);
options.LoginPath = "/Account/Login"; // If the LoginPath is not set here,
// ASP.NET Core will default to /Account/Login
options.LogoutPath = "/Account/Logout"; // If the LogoutPath is not set here,
// ASP.NET Core will default to /Account/Logout
options.AccessDeniedPath = "/Account/AccessDenied"; // If the AccessDeniedPath is
// not set here, ASP.NET Core
// will default to
// /Account/AccessDenied
options.SlidingExpiration = true;
});
下面是我們如何在ConfigureService方法中新增ASP.NET Core身份服務如下:
第4步:註冊並建立您的第一個使用者
現在,我們的ASP.NET Core Web應用程式已準備好供使用者在我們的網站上註冊,且使用者也可以在註冊後登入我們的系統。我們將通過在後續步驟中向用戶新增角色來執行授權。構建並執行應用程式以註冊您的第一個預設管理員使用者。
單擊註冊連結註冊我們的第一個使用者。
遷移
當我們點選“註冊”按鈕時,我們可以看到下面的頁面。不要對這個頁面感到恐慌,因為第一次執行我們需要進行遷移,只需單擊Apply Migrations按鈕。
我們可以看到確認為“已應用遷移”,然後單擊“嘗試重新整理頁面訊息”。
重新整理頁面,我們可以看到新註冊的使用者已登入我們的網站。
重新整理資料庫
重新整理資料庫時,我們可以看到所有的Identity表都已建立。
我們可以檢查aspNetUsers表以查詢新建立的使用者詳細資訊。我們還可以看到ASPNetRoles並且ASPNetUserRoles沒有記錄,因為我們尚未為角色建立任何角色或新增使用者。在下一步中,我們將新增一個新角色為“ Admin”,我們將新註冊使用者新增為Admin。
第5步:建立角色併為角色分配使用者
我們使用以下方法建立一個新角色為“ Admin”,我們將最近註冊的“ Admin” 分配給我們的網站。開啟Startup.cs檔案,並在你的Startup.cs檔案中新增以下方法。
private async Task CreateUserRoles(IServiceProvider serviceProvider)
{
var RoleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
var UserManager = serviceProvider.GetRequiredService<UserManager<ApplicationUser>>();
IdentityResult roleResult;
//Adding Admin Role
var roleCheck = await RoleManager.RoleExistsAsync("Admin");
if (!roleCheck)
{
//create the roles and seed them to the database
roleResult = await RoleManager.CreateAsync(new IdentityRole("Admin"));
}
//Assign Admin role to the main User here we have given our newly registered
//login id for Admin management
ApplicationUser user = await UserManager.FindByEmailAsync("[email protected]");
var User = new ApplicationUser();
await UserManager.AddToRoleAsync(user, "Admin");
}
從Startup.cs檔案中,我們可以找到該Configure方法。從這個Configure方法呼叫我們的CreateUserRoles方法。當我們構建和執行應用程式時,我們可以看到在ASPNetRole表中將建立“Admin”的新角色 。
當我們構建並執行應用程式時,我們可以看到ASPNetRoles表中添加了新角色,並且我們可以看到我們的預設使用者已被分配了 Admin角色。
第6步:建立管理頁面和設定授權
現在我們有一個用於ASP.NET Core Web應用程式的Admin使用者。下一步,讓我們建立一個新頁面並將此頁面的授權設定為僅登入,僅管理員使用者可以檢視此頁面。為此,我們建立了一個新命命名為Admin的Controller。
建立Admin控制器
右鍵單擊Controller資料夾並單擊Add New Controller,選擇MVC Controller - Empty,然後單擊Add。
輸入您的Controller名稱為Admin,然後單擊Add。
在控制器中,右鍵單擊Index,然後單擊新增檢視。單擊“新增”按鈕以建立檢視頁面。
我們可以看到我們的管理控制器和管理檢視已建立。
開啟Admin / Index.cshtml頁面以根據需要進行設計。在這裡,我添加了如下的簡單文字:
接下來,我們建立一個新選單以顯示Admin Page。要建立新選單,請從Views / Shared資料夾中開啟_Layout.cshtml。新增如下圖所示的選單:
現在我們已經建立了管理頁面,併為管理員添加了選單。我們僅為Admin使用者建立了此頁面,其他使用者或未登入的使用者不應該看到此頁面。如果我們執行我們的應用程式會發生什麼。
我們可以看到新的選單“Admin Page”已經建立,現在對所有人開放。這意味著任何人都可以單擊該連結並檢視該頁面的內容。
在這裡,我們可以看到,我們可以通過登入檢視管理頁面。
設定授權
為避免這種情況,我們在管理頁面控制器中使用授權。開啟我們的 Admin控制器並新增以下程式碼行:
[Authorize(Roles = "Admin")]
public IActionResult Index()
{
return View();
}
如果我們執行我們的應用程式並單擊Admin Page,它將自動重定向到Log in頁面。
請注意,只有管理員角色成員才能檢視管理頁面,因為我們僅為管理員角色設定了授權。如果您想新增更多角色,我們可以使用逗號,如下面的程式碼:
[Authorize(Roles = "Admin,SuperAdmin,Manager")]
第7步:按使用者角色顯示隱藏選單
現在讓我們更進一步的只顯示登入管理員使用者的管理員選單。為此,我們從Views / Shared資料夾下開啟Layout.cshtml並編輯新新增的選單,如下面的程式碼。在這個程式碼中,首先我們檢查使用者是否已經過身份驗證,意味著登入,然後我們檢查使用者是否具有檢視選單的授權。
<li>
@if (User.Identity.IsAuthenticated)
{
@if (User.IsInRole("Admin"))
{
<a asp-area="" asp-controller="Admin" asp-action="Index">Admin Page</a>
}
}
</li>
以下是我們的程式碼:
執行應用程式,預設情況下我們可以看到“Admin Page”不會顯示在我們的頂層選單中。僅登入管理員角色使用者可以檢視選單。
讓我們通過我們最初建立的管理員使用者登入來試試這個。
登入後,我們可以看到管理員使用者現在可以檢視Admin Page選單。
讓我們嘗試建立普通使用者,因為我們現在在註冊新使用者。
註冊後,我們可以看到,對於這個使用者,我們沒有新增“Admin&rdquorole”,他無權檢視Admin Page。
參考連結:https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?tabs=visual-studio%2Caspnetcore2x
原文地址:https://www.codeproject.com/Articles/1235077/Getting-Started-With-ASP-NET-Core-Identity-And-Rol