Asp.net Core 2.0 用既有的使用者帳密作為驗證機制

主要使用情境為採用企業內部其他的既有網站授權機制(例如簡單的 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);
}

請注意這裡也要使用同樣的字串名稱。

有問題嗎?歡迎一起討論喔!