我正在尝试使用基于jwt的令牌为我的apis设置我的授权策略 . 我有两个控制器,由单独的apis使用 . 我需要确保用户只能访问他/她可以使用的那些用户 . 所以我想我会选择基于策略的授权
[Authorize(Policy = "API1")]
[Route("api1/endpoint")]
public class API1Controller : Controller
{
// my actions for api 1
}
[Authorize(Policy = "API2")]
[Route("api2/endpoint")]
public class API2Controller : Controller
{
// my actions for api 2
}
在启动时添加策略
services.AddAuthorization(options => {
options.AddPolicy("API1User", policy => policy.Requirements.Add(new ApplicationTypeRequirement(ApplicationType.API1)));
options.AddPolicy("API2User", policy => policy.Requirements.Add(new ApplicationTypeRequirement(ApplicationType.API2)));
});
// Adding handlers after this
所以我的问题是,调用存储过程来检查数据库以获取用户应用程序权限的最佳位置 . 阅读以下内容(https://docs.microsoft.com/en-us/aspnet/core/security/authorization/policies?view=aspnetcore-2.1),它详细说明了令牌中声明的使用 .
现在,我保存的JWT令牌是用户ID,名字,姓氏和电子邮件,就是这样 .
1 回答
在ActionFilter中检查身份验证和授权的最佳位置,您可以检查数据库端的身份验证策略以及JWT .
如果要授权控制器,则必须使用中间件( ActionFilterAttribute ),它将检测用户's http request and validate them by decoding user'的令牌 . 您可以过滤所有http方法(GET,POST,PUT,DELETE等),并可以为特定的http方法实现自己的授权逻辑 .
AuthorizationRequiredAttribute.cs
N.B:这里所有代码都与您的问题无关 . 但希望你能理解我是如何根据条件过滤获取/发布请求的 .
}
HomeController.cs
现在您可以使用AuthorizationRequiredAttribute作为api / controller过滤服务 . 我修改了你的控制器,看到了Message方法