[英]Adding a Policy-based Authorization skips JWT bearer token authentication check?
我有一個REST API服務,該服務實現了從Azure AD獲得的基於JWT承載令牌的身份驗證。
// add support for custom Authorization policies
services
.AddAuthorization(authoptions =>
{
authoptions.AddPolicy("MemberOfUsersADGroup", policy =>
policy.Requirements.Add(new IsMemberOfUsersADGroup())
);
})
.AddSingleton<IAuthorizationHandler, IsMemberOfUsersADGroupAuthHandler>();
// add support for this service to recieve OAUTH2 JWT bearer tokens
services
.AddAuthentication(authOptions =>
{
authOptions.DefaultScheme = JwtBearerDefaults.AuthenticationScheme;
})
.AddJwtBearer(options =>
{
// token validation (REQUIRED)
options.Audience = "AUDIENCE GUID";
options.Authority = String.Format("https://login.microsoftonline.com/[TENANTGUID]/");
});
以下是策略授權處理程序的實現方式。 IT 無條件地返回成功 。
public class IsMemberOfSenseiUsersADGroup : IAuthorizationRequirement
{
}
public class IsMemberOfUsersADGroupAuthHandler : AuthorizationHandler<IsMemberOfUsersADGroup>
{
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, IsMemberOfUsersADGroup requirement)
{
// unconditional success for now
context.Succeed(requirement);
return Task.CompletedTask;
}
}
情況1如果我這樣裝飾控制器,並且在沒有承載令牌的情況下進行調用,那么我將得到預期的401。
[Authorize]
[Route("api/dostuff")]
public class DoStuffController : Controller
{
情況2,但是,如果我用策略裝飾控制器,並且在不使用承載令牌的情況下進行調用, 則REST API調用可以順利通過,根本不需要承載令牌!!! 我看到該調用進入AuthHandler HandleRequirementAsync(),然后成功,即使未傳遞承載令牌也是如此。
[Authorize(Policy = "MemberOfUsersADGroup")]
[Route("api/dostuff")]
public class DoStuffController : Controller
{
我根本無法解釋這種行為。 我很高興在測試中發現了這一點,因為我認為策略檢查是可加的(如“ AddPolicy”調用所示),但是它似乎取代了整個驗證鏈,包括。 這種情況是在案例1中由JWT承載中間件完成的。
難道我做錯了什么? 它是否與在ConfigureServices()中進行的Add ***調用的順序有關,無論策略授權處理程序是否通過檢查,如何確保JWT承載令牌驗證有效?
這是預期的行為。
如果您希望您的授權策略拒絕未經身份驗證的請求,只需調用builder.RequireAuthenticatedUser()
。
我遇到了同樣的問題。 我的解決方法是將控制器置於默認的[Authorize]
屬性下,然后每個操作都有其自己的策略[Authorize(Policy = "MemberOfUsersADGroup")]
。 對我而言,這沒什么大不了的,因為我只有一個控制者,而該行動的控制者是在同一策略下。 不需要RequireAuthenticatedUser和類似的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.