我的应用程序设置为除了登录之外的所有请求都必须使用Web API中的授权属性进行“授权”。例如
[Authorize]
[HttpGet, Route("api/account/profile")]
public ApplicationUser Profile()
{
return userModel;
}
并且只有登录不需要授权,因为这是您获得令牌的地方;)
[AllowAnonymous]
[HttpPost, Route("api/account/login")]
public async Task<IHttpActionResult> Login(LoginViewModel model)
{
....
}
有没有一种方法可以全局设置[Authorize]
属性,而不是必须将[Authorize]
属性添加到所有路由中?
6条答案
按热度按时间fcy6dtqo1#
你有两个选择
1.控制器级别,通过使用authorize属性装饰您的控制器。
1.您还可以在WebApiConfig.cs文件的
Register
方法中将其设置为全局级别的所有路由nvbavucw2#
您可以将
AuthorizeAttribute
设置为WebApiConfig
文件,如下所示:现在所有来自Web API控制器的方法都需要授权。如果要删除方法的授权要求,则需要添加属性
[AllowAnonymous]
,就像Login操作方法中那样。eulz3vhy3#
自ASP.NET Core 3.0以来,有一种新的方法可以通过使用端点路由中间件来实现此操作,而无需过滤器,请参阅:https://learn.microsoft.com/en-gb/aspnet/core/migration/22-to-30?view=aspnetcore-5.0&tabs=visual-studio#authorization
您需要添加以下内容(如果尚未存在):
以及端点中间件:
JWT身份验证方案的示例:
您仍然可以在控制器或操作上使用
[AllowAnonymous]
允许匿名访问(例如:用于用户登录)。cidc1ykv4#
在ASP.NET Core Web API中,它是这样的:
来源:https://joonasw.net/view/apply-authz-by-default
polkgigr5#
我只是想在其他答案中添加一些东西如果你用
然后如果有需要,你也可以将所有依赖注入到你的属性中
4ktjp1zp6#
我使用另一种方法-因为我所有的ApiController类都是从我自己的自定义类ControllerBase派生的,所以我只是将我的自定义属性[RequireAuthorization]设置为这个基类。所以这会被继承到所有派生的控制器类。