ASP.NET Identity 是一个用于 ASP.NET 应用程序的用户身份验证和授权框架。在 Web API 中使用 ASP.NET Identity 可以帮助你保护你的 API,确保只有经过身份验证的用户才能访问受保护的资源。以下是如何在 Web API 中使用 ASP.NET Identity 的步骤:
- 安装 NuGet 包
首先,你需要安装 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 { // 添加自定义角色属性 }
- 配置 IdentityContext
创建一个继承自 IdentityDbContext
的类,用于连接到数据库并存储用户和角色信息。例如:
public class ApplicationDbContext : IdentityDbContext
{
public ApplicationDbContext() : base("DefaultConnection")
{
}
}
这里的 "DefaultConnection"
是连接字符串的名称,你需要在 web.config
文件中配置它。
- 设置 Startup.cs
在你的 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 只有经过身份验证的用户才能访问。