Если вы решили настроить аутентификацию одним из следующих способов:
Аутентификация по Bearer в Asp.net
При работе со своим собственным SSO сервером, например, разворачиваемым локально экземпляр Keycloak в контейнере. Для такого SSO сервера требуется сертификат и если он доступен из сети, то его можно подписать используя Let’s Encrypt. Но если нет, то нам потребуется добавить свой сертификат и сообщить хосту на котором разворачивается приложение то, что используемый SSO сертификат доверенный.
По идее его можно добавить тремя способами:
- Добавить в сборку приложения и в коде приложения добавить в хранилише сертификатов при старте
- Добавить в хранилище при сборке образа в
.Dockerfile - Добавить монтирование файла в
docker-compose.yml
Здесь мы рассмотрим первый вариант.
Настройка
Добавим сертификат в проект
Добавим в папку проекта наш сертификат, пусть это будет certificate.crt.
Сделает так, чтобы этот файл попадал в папку сборки. Для этого в файл проекта, в моем случае это WebApi.csproj добавим следующий блок:
<Project Sdk="Microsoft.NET.Sdk.Web">
<ItemGroup>
<None Update="certificate.crt">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>Создадим расширение для подключения сертификата
Создадим Extensions для подключения сертификата. В моем случае это файл DependencyInjection/Certificate.cs в основном проекте Asp.net:
using System.Security.Cryptography.X509Certificates;
public static class Certificate
{
private static IServiceCollection ConfigureCertificate(
this IServiceCollection services,
string certificatePath
)
{
if (File.Exists(certificatePath))
{
// Загрузка корневого сертификата
var certificate = new X509Certificate2(certificatePath);
// Добавление корневого сертификата в доверенные
using var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadWrite);
store.Add(certificate);
}
return services;
}
}Подключим сертификат
В Program.cs:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllers();
builder.Services.ConfigureCertificate("certificate.crt");
var app = builder.Build();
app.UseHttpsRedirection();
app.MapControllers();
app.Run();Теперь при аутентификации не должно быть жалоб на недоверенный сертификат.