NET8 实现 MVC IAuthorizationFilter 自定义认证
时间: 2024-10-02 16:04:21 浏览: 15
.NET 8 中,如果你想要在 MVC (Model-View-Controller) 框架下自定义授权过滤器,你可以通过创建一个实现了 `IAuthorizationFilter` 接口的类来实现。这个接口位于 `Microsoft.AspNetCore.Mvc.Filters` 命名空间下,用于控制对控制器动作的访问权限。
下面是一个简单的步骤说明:
1. 创建一个新的类,比如叫 `CustomAuthorizationFilter.cs`,并添加 `IAuthorizationFilter` 和 `ActionExecutingContext`, `AuthorizationResult` 等所需依赖项到类声明上:
```csharp
using Microsoft.AspNetCore.Mvc.Filters;
using System.Threading.Tasks;
public class CustomAuthorizationFilter : IAuthorizationFilter
{
//...
}
```
2. 实现 `OnAuthorization` 方法,这是执行授权逻辑的地方。在这个方法中,你可以检查用户的身份、角色或其他条件,并根据结果返回 `AuthorizeResult` 或 `AllowAnonymousResult`:
```csharp
public async Task OnAuthorization(ActionExecutingContext context, AuthorizationFilterContext filterContext)
{
// 获取请求用户信息
var user = await _userManager.GetUserAsync(context.HttpContext.User);
// 根据用户角色或权限判断是否允许访问
if (!user.HasRole("Admin")) // 这里假设 "Admin" 是你需要的角色
{
await filterContext.ResultAsync(new ForbidResult()); // 如果不符合,拒绝访问
}
else
{
// 允许访问,继续执行其他操作
await context.ExecuteAsync();
}
}
```
3. 在需要应用此过滤器的控制器上注册它。在 `Startup.cs` 的 `ConfigureServices` 方法中,添加依赖注入,然后在 `Configure` 方法中使用 `UseAuthorizationFilter` 或手动注册到具体的控制器:
```csharp
services.AddControllers(options =>
{
options.Filters.Add(typeof(CustomAuthorizationFilter)); // 添加全局过滤器
});
// 或者针对特定控制器
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers().AddFilterForAction<YourController>(nameof(YourController.YourAction), typeof(CustomAuthorizationFilter));
});
```