主要使用情境為採用企業內部其他的既有網站授權機制(例如簡單的 User Table),裡面包含使用者的資料,往往同仁會希望採用同樣的帳號與密碼就可以登入,而不要再產生新的帳密。在這種情境下,無法使用 Asp.Net 推薦的 Aspnet.Identity 的驗證方式,因為要整個移轉有資料庫方面的問題。
但 Asp.net Core 提供 Cookie Authentication 可以存取既有的資料庫做為驗證的來源。參閱官方說明:Using Cookie Authentication without ASP.NET Core Identity 與 官方設定範例
實做參考:Cookie Authentication In ASP.net Core 2.0 主要修改:
public void ConfigureServices(IServiceCollection services)
{
services.AddAuthentication("CookieAuthenticationScheme")
.AddCookie("CookieAuthenticationScheme", options =>
{
options.AccessDeniedPath = "/Account/Forbidden/";
options.LoginPath = "/Account/Login/";
options.ExpireTimeSpan = TimeSpan.FromHours(2);
});
services.AddMvc();
}
使用 [Authorize] attribute 時候,必須要指定要使用的認證方式,否則不會自動導入到 Login Page
在 Sign In 的時候,可以直接建立一個虛假的 Claim,只需要給名字即可:
private async Task SignInAsync(User user)
{
var claims = new List<Claim> { new Claim(ClaimTypes.Name, user.Name) };
var userIdentity = new ClaimsIdentity(claims, "login");
ClaimsPrincipal principal = new ClaimsPrincipal(userIdentity);
await HttpContext.SignInAsync("CookieAuthenticationScheme", principal);
}
請注意這裡也要使用同樣的字串名稱。
有問題嗎?歡迎一起討論喔!