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

Zmiana SecretKey (JWT) po uruchomieniu WebApi (z poziomu controllera)
KO
  • Rejestracja:ponad 10 lat
  • Ostatnio:18 dni
  • Postów:419
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.

SA
  • Rejestracja:około 12 lat
  • Ostatnio:około 2 godziny
  • Postów:1427
2

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

KO
  • Rejestracja:ponad 10 lat
  • Ostatnio:18 dni
  • Postów:419
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? :(

edytowany 1x, ostatnio: Kofcio
SA
  • Rejestracja:około 12 lat
  • Ostatnio:około 2 godziny
  • Postów:1427
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.

hzmzp
  • Rejestracja:ponad 11 lat
  • Ostatnio:około 12 godzin
  • Postów:619
0

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

SA
Wg mnie fajne są pytania o to jak zrobić coś nietypowego, można się czegoś nauczyć albo dowiedzieć, że się da. Ja też nie wiedziałem czy się da, tylko lepiej czytam dokumentację.
hzmzp
z reguły da się wszystko i jest to raczej kwestia czasu/pieniędzy. Moje pytanie kierowane jest tym, że jak zmieni secret to wywali wszystkim sesje, więc po co takie coś robić? co chce osiągnąć? Może to jest jakiś pomysł na ficzer w pseudosecurity.
KO
Ogólnie to nie zamierzam tego nadużywać. To ma być tylko opcja z której będę mógł ale nie koniecznie będę chciał korzystać. A głównie chodzi o ustawienie SecretKey w powiązanych API, o których wspomniałem niżej - chcę ograniczyć konieczność ręcznego ustawiania Secret-ów z uwagi, że te API nie będą na moich serwerach.
KO
  • Rejestracja:ponad 10 lat
  • Ostatnio:18 dni
  • Postów:419
0

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

Kopiuj
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 :-).

hzmzp
aha, teraz rozumiem, po prostu będzie taki config provider i z tego powodu jest dynamiczne ładowanie :)
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)