在 ASP.NET Core Web API 中,您可以使用授权处理程序和身份验证处理程序来保护和验证 API 端点。授权处理程序用于决定用户是否有权访问请求的资源,而身份验证处理程序用于验证用户身份。
在处理身份验证时,如果处理程序遇到任何问题,都可以使用 HttpContext.SignOutAsync()
方法中止流程,让使用者弹回登录页面。
但是,在授权处理期间,如果您需要中止 API 调用并直接返回 403 禁止访问状态代码,则应使用 ForbidAsync()
方法。
在下面的示例中,我们将演示如何在授权处理程序中使用 ForbidAsync()
方法来中止 API 调用:
首先,创建一个名为 AuthorizationHandler
的授权处理程序:
public class AuthorizationHandler : AuthorizationHandler
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, Requirement requirement)
{
if (!IsAuthorized(context))
{
context.Fail();
return Task.CompletedTask;
}
return Task.CompletedTask;
}
private bool IsAuthorized(AuthorizationHandlerContext context)
{
// Check if the user is authorized
// ...
// If the user is not authorized, return false and use the ForbidAsync() method
if (!isAuthorized)
{
context.ForbidAsync();
return false;
}
return true;
}
}
在 IsAuthorized
方法中,如果用户未被授权,则使用 context.ForbidAsync()
方法中止 API 调用。
然后,在 Startup.cs
文件中注册授权处理程序:
services.AddAuthorization(options =>
{
options.AddPolicy("ExamplePolicy", policy =>
{
policy.Requirements.Add(new Requirement());
});
});
services.AddSingleton();
现在,您可以定义需要保护和验证的 API 端