#asp.net-core #asp.net-core-webapi #asp.net-authentication
#asp.сетевое ядро #asp.net-ядро-webapi #asp.net-аутентификация
Вопрос:
В настоящее время у нас есть рабочая аутентификация OAuth для нашей ASP.NET Веб-API ядра 5. Мы также хотели бы добавить проверку подлинности сертификата, чтобы быть вдвойне уверенными в нашем абоненте. Есть ли способ заполучить их обоих? Я попробовал приведенный ниже код, но он переопределяет одно над другим.
services.AddAuthentication(AzureADDefaults.JwtBearerAuthenticationScheme) .AddAzureADBearer(options =gt; { options.Instance = aADInstance; options.ClientId = clientIdWithScope; options.Domain = aADDomain; options.TenantId = aADTenantId; } ) services.AddAuthentication( CertificateAuthenticationDefaults.AuthenticationScheme) .AddCertificate();
Ответ №1:
Изменение политики по умолчанию
// Add authentication schemes before, we already did this, so I would skip this part // Change default Authorization policy services.AddAuthorization(cfg =gt; cfg.DefaultPolicy = new AuthorizationPolicyBuilder(CertificateAuthenticationDefaults.AuthenticationScheme, AzureADDefaults.JwtBearerAuthenticationScheme).RequireAuthenticatedUser().Build());
[Authorize]
атрибут теперь потребует , чтобы все http-запросы удовлетворялись обоим CertificateAuthenticationDefaults.AuthenticationScheme
, и AzureADDefaults.JwtBearerAuthenticationScheme
это может быть не то поведение, которое мы хотим для всех наших конечных точек, поэтому будьте осторожны с этим подходом.
Добавьте нашу собственную политику
// Add authentication schemes before, we already did this, so I would skip this part // Adding our own policy services.AddAuthorization(options =gt; { options.AddPolicy("ComposedPolicy", p =gt; { p.AuthenticationSchemes = new Listlt;stringgt; {CertificateAuthenticationDefaults.AuthenticationScheme, AzureADDefaults.JwtBearerAuthenticationScheme}; p.RequireAuthenticatedUser(); p.Build(); }); });
[Authorize]
поведение атрибутов теперь будет нетронутым, но всякий раз, когда мы хотим использовать нашу пользовательскую политику, мы должны указывать их [Authorize(Policy = "ComposedPolicy")]
.
Просто выберите подход, который подходит лучше всего.