已配置AddAuthentication但无需Token即可访问API端点问题排查
问题分析与解决办法
你当前的代码仅配置了身份验证的基础框架,但没有为API端点设置强制授权的规则,默认情况下ASP.NET Core会允许所有匿名请求访问端点,因此即使前端不携带Token也能正常调用API。
解决方式有两种,任选其一即可:
1. 全局配置默认授权策略(推荐)
修改AddAuthorization的配置,添加默认回退策略,强制所有未指定特殊授权规则的端点必须经过身份验证:
builder.Services.AddAuthorization(options => { // 设置全局默认策略:所有端点必须使用已认证用户访问 options.FallbackPolicy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); });
如果有个别端点需要允许匿名访问,只需在对应的控制器或Action上添加[AllowAnonymous]特性即可。
2. 为单个控制器/Action添加授权特性
在需要保护的控制器类或具体Action上添加[Authorize]特性,明确指定该端点需要身份验证:
[ApiController] [Route("api/[controller]")] [Authorize] // 此控制器下所有Action均需授权 public class YourController : ControllerBase { // 示例:允许匿名访问的Action [AllowAnonymous] [HttpGet("public-info")] public IActionResult GetPublicInfo() { return Ok("这是公开信息"); } // 需要授权才能访问的Action [HttpGet("private-data")] public IActionResult GetPrivateData() { return Ok("这是需要授权的私有数据"); } }
额外检查
你的中间件顺序是正确的(UseAuthentication → UseAuthorization → MapControllers),这个顺序确保了认证逻辑在授权之前执行,无需调整。
内容的提问来源于stack exchange,提问作者User
相关产品推荐
相关产品推荐

