Zmiana SecretKey (JWT) po uruchomieniu WebApi (z poziomu controllera)

0

Cześć,
w klasie Program konfigurujemy różne rzeczy dotyczące naszego API. Jedną z takich rzeczy jest: IssuerSigningKey - właściwość w klasie TokenValidationParameters, którą ustawiamy w builder.Services.AddAuthentication(...).
A moje pytanie jest: Czy możemy jakoś zmienić te ustawienia z poziomu controllera tj. po uruchomieniu naszego API?
Wymyśliłem sobie, że SecretKey będę chciał wygenerować losowo z poziomu Api a później będę mógł je odczytać i chciałbym również móc je zmienić z poziomu controllera (bez zamykania aplikacji).
Z góry dziękuję za pomoc.

2

Tak, jak chcesz zmieniać klucz to możesz użyć IssuerSigningKeyResolver w TokenValidationParameters.

0

@Saalin Dzięki za naprowadzenie!
A mógłbyś mi jeszcze krótko wyjaśnić jak to działa?
Czy dobrze rozumiem, że mam sobie stworzyć jakiegoś delegata tj. funkcję, która sama będzie weryfikować zgodność tokena? Czyli muszę sobie zaimplementować cały mechanizm weryfikacji? :-/ Nie ma jakiegoś prostszego rozwiązania? :(

2

Nie, piszesz funkcję (delegata), który zwraca SecurityKey. Nawet sama nazwa wskazuje, że chodzi tylko o resolvowanie klucza. Cała reszta (w tym walidacja tokenu) pozostaje ta sama.

0

Czy mógłbyś wyjaśnić czemu chcesz zmieniać dynamicznie SecretKey?

0

@Saalin dzięki, chociaż ciągle mam pewne wątpliwości jak to działa... Ten delegat przyjmuje następujące parametry:

public delegate IEnumerable<SecurityKey> IssuerSigningKeyResolverUsingConfiguration(string token,
	SecurityToken securityToken,
	string kid,
	TokenValidationParameters validationParameters,
	BaseConfiguration configuration);

Czym jest w takim razie pierwszy parametr (token) oraz kid i jak można je wykorzystać? Rozumiem, że mogę zignorować te parametry, ale po co one w takim razie są?

Dodatkowo, jeśli ten delegat przyjmuje zarówno TokenValidationParameters, w którym można usawić SecurityKey oraz zwraca SecurityKey to czy powinienem jedynie zwrócić SekurityKey czy również ustawić w TokenValidationParameters?

Czy dobrze rozumiem, że w takiej sytuacji wystarczy, że zdefiniuję sobie jakąś statyczną listę z SecurityKey i w delegacie będę ją zwracał - a jak będę chciał zmienić klucz do podpisu to jedynie podmienię go w tej statycznej tablicy?

@hzmzp powodów jest kilka. Ja swój klucz generuję bezpośrednio w API (nie zapisuję go do AppSettings etc. i chciałbym móc zdalnie go zmienić z poziomu panelu administratora.
Dodatkowo założenie jest takie, że chcę stworzyć API główne do zarządzania m.in. userami oraz tokenami do innych API powiązanych z moją aplikacją. Wszystkie klucze w powiązanych API będą generowane przez moje główne API, które również będzie odpowiedzialne za generowanie JWT do tych API.
Ogólnie temat jest dość zawiły i być może to głupie, ale tak już sobie to wymyśliłem :-).

1 użytkowników online, w tym zalogowanych: 0, gości: 1