Можно ли изменить существующий механизм авторизации, чтобы позволить пользователям, не являющимся пользователями AzureAD, использовать контроллер.
Похоже, вы пытаетесь настроить [Authorize]
для разрешения нескольких Схема аутентификации одновременно. Если это так, вы должны сначала зарегистрировать эту схему аутентификации с помощью AddAuthentication().AddMyScheme1().AddMyScheme2()...
:
services.AddAuthentication()
.AddAzureAD(options => Configuration.Bind("AzureAd", options));
.AddJwtBearer(otps=>{
otps.TokenValidationParameters = new TokenValidationParameters{ ...};
});
, а затем изменить политику авторизации по умолчанию, чтобы аутентифицировать эти схемы аутентификации одновременно. Например, если вы хотите разрешить Identity / JwtBearer / AzureAd в то же время, вы можете сделать это следующим образом
services.AddAuthorization(opts =>{
opts.DefaultPolicy = new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(
IdentityConstants.ApplicationScheme // ASP.NET Core Identity Authentication
,JwtBearerDefaults.AuthenticationScheme // JwtBearer Authentication
// ,"AzureAD" // AzureAd Authentication
)
.RequireAuthenticatedUser()
.Build();
});
или если вы хотите разрешить только указывать c пользователя / роль далее, не стесняйтесь настроить его по:
opts.DefaultPolicy = new AuthorizationPolicyBuilder()
.AddAuthenticationSchemes(
IdentityConstants.ApplicationScheme // ASP.NET Core Identity Authentication
,JwtBearerDefaults.AuthenticationScheme // JwtBearer Authentication
// ,"AzureAD" // AzureAd Authentication
)
.RequireAuthenticatedUser()
.RequireRole(...)
.RequireAssertion(ctx =>{
...
return true_or_false;
})
.Build();