Мой клиент настаивает на том, что IdentityServer4 не следует размещать целиком в DMZ по соображениям безопасности, особенно с учетом того, что он имеет прямой доступ к серверу базы данных.
Из документации IdentityServer4 и некоторых других публикаций кажется, что это должно бытьможно разместить страницы входа MVC в DMZ и оставить IdentityServer4 API за брандмауэром.Если я правильно понимаю, я могу добиться этого с помощью настроек LoginUrl, LogoutUrl, ConsentUrl, ErrorUrl, DeviceVerificationUrl.
Однако я не уверен насчет API OpenID.Моим приложениям SPA потребуются не только страницы входа в систему, но и доступ к конечным точкам OpenID (подключение / авторизация, подключение / userinfo, подключение / проверка .well-known / openid-configuration).
Как мнезащищать эти конечные точки IdentityServer4 в DMZ безопасно?
В настоящее время я не знаю, как эти конечные точки OpenID создаются IdentityServer4.В моем коде запуска приложения я просто вызываю AddIdentityServer
и UseIdentityServer
, и это делает чудо, регистрируя конечные точки в моем приложении MVC и затем обрабатывая всю логику аутентификации где-то глубоко внутри IdentityServer4.
Очевидно,если я хочу отделить бэкэнд IdentityServer4, я должен вызвать AddIdentityServer
и UseIdentityServer
в коде своего веб-сервиса API бэкэнда, верно?Я не могу использовать эти вызовы методов на своем интерфейсном веб-сайте в DMZ, потому что тогда IdentityServer4 попытается подключиться к базе данных для данных OpenID, но база данных находится за брандмауэром и недоступна непосредственно из DMZ.
У меня есть следующий типичный код для инициализации IdentityServer4:
services.AddIdentityServer(
options =>
{
...
})
.AddConfigurationStore(options =>
{
options.ConfigureDbContext = b => b.UseSqlServer(Configuration.GetConnectionString("IdsvConnection"));
...
})
// this adds the operational data from DB (codes, tokens, consents)
.AddOperationalStore(options =>
{
options.ConfigureDbContext = b => b.UseSqlServer(Configuration.GetConnectionString("IdsvConnection"));
...
})
.AddAspNetIdentity<ApplicationUser>();
Но если я оставлю этот код в front-end, IdentityServer4 не будет работать.Есть ли какой-нибудь способ настроить какой-либо другой вид доступа к базе данных хранилища операционных и конфигурационных данных через API бэкэнда?
Моя текущая инфраструктура IdentityServer4 выглядит следующим образом:
SPA APP,
mobile apps
|
|
MVC app
with login pages
and IdentityServer4 OpenID endpoint
|
|
SQL server
with IdentityServer4 config
and operational stores
, но мне нужно это так:
SPA APP,
mobile apps
|
|
--- DMZ ---
MVC app
with login pages
and IdentityServer4 OpenID endpoint
|
|
--- firewall ---
API web service
|
|
SQL server
with IdentityServer4 config
and operational stores