ASP.NET Identity 是一個用于 ASP.NET 應用程序的用戶身份驗證和授權框架。在 Web API 中使用 ASP.NET Identity 可以幫助你保護你的 API,確保只有經過身份驗證的用戶才能訪問受保護的資源。以下是如何在 Web API 中使用 ASP.NET Identity 的步驟:
首先,你需要安裝 ASP.NET Identity 的相關 NuGet 包。在你的 Web API 項目中,打開 NuGet 包管理器控制臺(Tools -> NuGet Package Manager -> Package Manager Console),然后運行以下命令:
Install-Package Microsoft.AspNet.Identity.EntityFramework
這將安裝 ASP.NET Identity 的 Entity Framework 供應商包,它允許你將用戶和角色信息存儲在數據庫中。
接下來,你需要創建表示用戶和角色的類。這些類通常繼承自 IdentityUser
和 IdentityRole
。例如:
public class ApplicationUser : IdentityUser
{
// 添加自定義用戶屬性
}
public class ApplicationRole : IdentityRole
{
// 添加自定義角色屬性
}
創建一個繼承自 IdentityDbContext
的類,用于連接到數據庫并存儲用戶和角色信息。例如:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole>
{
public ApplicationDbContext() : base("DefaultConnection")
{
}
}
這里的 "DefaultConnection"
是連接字符串的名稱,你需要在 web.config
文件中配置它。
在你的 Web API 項目的 Startup.cs
文件中,配置 ASP.NET Identity。首先,添加以下命名空間引用:
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;
然后,在 ConfigureAuth
方法中,使用 HttpConfiguration
對象配置身份驗證:
public void ConfigureAuth(HttpConfiguration config)
{
// 配置 Cookie 身份驗證
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "Default",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// 配置 ASP.NET Identity
config.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/api/Account/Login"),
CookieHttpOnly = true,
CookieSecure = true,
CookieSameSite = SameSiteMode.Strict
});
config.UseIdentity();
}
這里,我們配置了 Cookie 身份驗證,并設置了登錄路徑為 /api/Account/Login
。你還需要創建一個名為 AccountController
的控制器來處理用戶登錄、注冊等操作。
現在你可以創建一個繼承自 ApiController
的控制器,并使用 [Authorize]
屬性來保護需要身份驗證的方法。例如:
[Authorize]
public class ValuesController : ApiController
{
// ...
}
這樣,只有經過身份驗證的用戶才能訪問這個控制器中的方法。
總之,在 Web API 中使用 ASP.NET Identity 需要安裝相關 NuGet 包,創建用戶和角色模型,配置 IdentityContext,設置 Startup.cs,以及創建受保護的控制器。這樣,你就可以確保你的 API 只有經過身份驗證的用戶才能訪問。