在行动中评估 AuthorizeAttribute
Evaluate AuthorizeAttribute in action
可以使用 [Authorize] 属性授权操作。但是我只想在特定条件下对动作进行授权,所以我不能使用这个属性。我认为我无法使用 IAuthorizationService.AuthorizeAsync,因为我没有任何策略名称。这是我在 Startup 中的服务配置。
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration, "AzureAdB2C");
所以我的问题是,如何将 [Authorize] 评估移动到操作代码中?
AuthorizeAttribute
将(可能与其他)转换为 AuthorizeFilter
并且此过滤器将使用一些不等同于简单 IAuthorizationService.AuthorizeAsync
的代码执行。但是,如果您无论如何都想使用它,我们可以通过使用 IAuthorizationPolicyProvider.GetDefaultPolicyAsync
来获取默认策略([Authorize]
在没有指定任何策略的情况下使用它)。之后你可以授权User
得到一个AuthorizationResult
。如果 属性 Succeeded
为真,则成功。否则,您可以在 属性 Failure
(AuthorizationFailure
类型)中获得详细的失败信息。这是代码:
public class TestController {
readonly IAuthorizationService _authorizationService;
readonly IAuthorizationPolicyProvider _authorizationPolicyProvider;
public TestController(IAuthorizationService authorizationService,
IAuthorizationPolicyProvider authorizationPolicyProvider){
_authorizationService = authorizationService;
_authorizationPolicyProvider = authorizationPolicyProvider;
}
public async Task<IActionResult> SomeAction(){
var defaultPolicy = await _authorizationPolicyProvider.GetDefaultPolicyAsync();
var authResult = await _authorizationService.AuthorizeAsync(User, defaultPolicy);
if(authResult.Succeeded){
//do something ...
}
}
}
可以使用 [Authorize] 属性授权操作。但是我只想在特定条件下对动作进行授权,所以我不能使用这个属性。我认为我无法使用 IAuthorizationService.AuthorizeAsync,因为我没有任何策略名称。这是我在 Startup 中的服务配置。
services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(Configuration, "AzureAdB2C");
所以我的问题是,如何将 [Authorize] 评估移动到操作代码中?
AuthorizeAttribute
将(可能与其他)转换为 AuthorizeFilter
并且此过滤器将使用一些不等同于简单 IAuthorizationService.AuthorizeAsync
的代码执行。但是,如果您无论如何都想使用它,我们可以通过使用 IAuthorizationPolicyProvider.GetDefaultPolicyAsync
来获取默认策略([Authorize]
在没有指定任何策略的情况下使用它)。之后你可以授权User
得到一个AuthorizationResult
。如果 属性 Succeeded
为真,则成功。否则,您可以在 属性 Failure
(AuthorizationFailure
类型)中获得详细的失败信息。这是代码:
public class TestController {
readonly IAuthorizationService _authorizationService;
readonly IAuthorizationPolicyProvider _authorizationPolicyProvider;
public TestController(IAuthorizationService authorizationService,
IAuthorizationPolicyProvider authorizationPolicyProvider){
_authorizationService = authorizationService;
_authorizationPolicyProvider = authorizationPolicyProvider;
}
public async Task<IActionResult> SomeAction(){
var defaultPolicy = await _authorizationPolicyProvider.GetDefaultPolicyAsync();
var authResult = await _authorizationService.AuthorizeAsync(User, defaultPolicy);
if(authResult.Succeeded){
//do something ...
}
}
}