У меня есть приложение с классической архитектурой клиент-сервер.ASP.NET Core находится в бэкэнде и во внешнем интерфейсе jQuery, Angular или vanilla-js.
Для аутентификации я использую сертифицированный сервер OpenID-Connect.(keycloak)
До сих пор я могу войти в систему через промежуточное ПО аутентификации ядра asp.net.Получить мой токен доступа и обновить токен.
Моя конфигурация выглядит следующим образом:
services.AddAuthentication(options =>
{
options.DefaultScheme = "Cookies";
options.DefaultChallengeScheme = "oidc";
})
.AddCookie("Cookies")
.AddOpenIdConnect("oidc", options =>
{
options.RequireHttpsMetadata = false;
options.MetadataAddress = Configuration["IdentityServer:Metadata"];
options.ClientId = Configuration["IdentityServer:ClientId"];
options.ClientSecret = Configuration["IdentityServer:ClientSecret"];
options.SaveTokens = true;
options.ResponseType = "code";
options.Scope.Add("openid profile email web origons roles SocpoeOnlyForDeveopers");
});
Теперь я хочу получить доступ к ресурсам с помощью полученного токена доступа не только из моего бэкэнда, но и из моегоfrontend.
Пока что я нашел только одно решение: сохранить токен доступа в переменной js в _Layout.cshtml.
Когда срок действия токена истекает, я делаю запрос к своему бэкэндуполучить новый токен доступа.Затем в бэкэнде я прошу сервер авторизации с токеном обновления получить новый токен доступа.Затем я отправляю токен доступа обратно во внешний интерфейс.
Немного как здесь: https://medium.com/@ognjanovski.gavril/use-refresh-token-to-renew-access-token-and-resend-all-unauthorized-401-requests-that-failed-190e9c97fc3a
Поскольку срок действия моих токенов доступа истекает через 5 минут (до короткого?) (По умолчанию keycloak) тамбыло бы очень много сетевой активности.
Есть ли лучший способ?
Спасибо за вашу помощь:)