Wpis z mikrobloga

Tworzę proste API w którym muszę zaimplementować mało skomplikowane 2FA, oczywiście 2FA jest opcjonalne, autoryzacja po JWT

pomyślałem że zrobię to w taki sposób że frontend odwołuje się na adres /authorize, dostaje zwrotkę

jeśli user ma *wyłączone* 2FA

{'access': '.......', 'refresh': '.......', 'two_fa_required': false}
jeśli user ma *włączone* 2FA

{'access': '.......', 'refresh': '', 'two_fa_required': true}
jeśli front dostanie w zwrotce 'two fa required' = true to musi wysłać na adres /confirm dane:

{'access': '... ten ze zwrotki poprzedniej', 'code': 'mailem przyjdzie'}
w odpowiedzi dostanie:

{'access': '.......', 'refresh': '.......', 'two_fa_required': false}
czy takie coś jest poprawne?

nigdzie nie znalazłem odpowiedniego przykładu jeśli 2FA nie jest obowiązkowe dla wszystkich.

#programowanie #python #programista15k
  • 4
@wiesiu2: Chyba nie do końca rozumiem. 2FA powinno być robione raz gdy użytkownik się loguje - i tu parametr two_fa_required, który mówi czy wymusić mu 2FA jest ok.

Natomiast nie stosowałbym tego pola do sterowania post-factum ty co ma mu się wyświetlić na froncie jak już potwierdził 2FA.

Frontowi powinno wystarczy, że dostał 2XX z endpointu /confirm.

Bo chyba nie planujesz robić 2FA na każdym callu do API, tylko
czy takie coś jest poprawne?


@wiesiu2: jak dla mnie jest ok, ale pod warunkiem że

{'access': '.......', 'refresh': '', 'two_fa_required': true}
zwróci accessToken, który pozwoli wywołać tylko endpoint /confirm, a nie każdy inny. Dopiero zwrotka z /confirm powinna zawierać access do reszty endpointów. W przeciwnym razie client wcale nie musi wywoływać /confirm nawet jeśli two_fa_required': true, bo i tak dostanie się do reszty.
@WaveCreator myślałem że tą samą zwrotkę użyje, w confirm zawsze twofarequired będzie false, ale może faktycznie dam inna zwrotkę w confirm

@rockip tak, jeśli twofarequired = true to access pozwoli tylko użyć akcji confirm, jeśli false to będzie już ostateczny

i teraz zastanawiam się czy zawsze nie wymuszać dwóch requestow, czyli frontend w autoryzacji zawsze dostanie access + info o 2fa, następnie zawsze musi wykonać w tle drugiego