我在我的WebAPI中使用OAuth2.0 Owin(密码授权)。我的初始令牌响应如下所示:
{
"access_token": "_ramSlQYasdsRTWEWew.....................",
"token_type": "bearer",
"expires_in": 17999,
"permissions": {
"user": [
"Add",
"Update",
"Delete"
],
"Product": [
"Read",
"Create"
]
}
}
我已经通过创建一个名为
permissions
的新键来自定义响应,它保存了相应用户的特权。从这里开始,我需要通过使用Authorize属性检查用户是否有足够的权限调用API,以此来验证每个来自我的
资源服务器
的请求。我在这里找到了一个类似的例子,但它是针对Dot net Core的,不适用于我的情况。
困难的部分是
permission
JSON Key本身包含一个与ArrayList
相关的复杂性。[CustomAuthorize(PermissionItem.Product, PermissionAction.Read)]
public async Task<IActionResult> Index()
{
return View(Index);
}
public class CustomAuthorize : AuthorizeAttribute {
public AuthorizeAttribute (PermissionItem item, PermissionAction action) {
//Need to initalize the Permission Enums
}
public override void OnAuthorization (HttpActionContext actionContext) {
//Code to get the value from Permissions ArrayList and compare it with the Enum values
}
}
上述是我的想法。但由于
Permissions
密钥和枚举比较的复杂性,我无法继续前进。此外,还有一个问题,如果用户的权限是添加和更新,则需要在我的控制器之前创建两个属性条件。
[CustomAuthorize(PermissionItem.User, PermissionAction.Add)]
[CustomAuthorize(PermissionItem.User, PermissionAction.Update)]
这导致添加更多的属性行。那么有没有办法将其作为单个条件,用
|
分隔?[CustomAuthorize(PermissionItem.User, PermissionAction.Update|PermissionAction.Add)]