Dvoufaktorová autentifikace – jak na to?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
potapnik
Člen | 127
+
0
-

Zdravím,
snažím se vymyslet průběh dvoufaktorového ověření uživatelů. Nyní mám standardní implementaci z Nette, kdy výsledkem funkce authenticate je vrácená identita nebo vyhození výjimky. Potřeboval bych tedy vyřešit „tu druhou“ část, ať už je to SMS kód nebo ověřovací appka s 30 vteřinovým tokenem. Jenže když předám identitu, tak už je uživatel považovaný za přihlášeného a ten druhý krok by tedy byl k ničemu. Jak se tedy poprat s tím, že uživatele přihlásím až po tom druhém ověření?

Předem díky.

Martk
Člen | 661
+
0
-

Co mě napadlo jako první, tak je mít 2 třídy identity nebo session. Ale chtělo by to upravit třídu User, kvůli isLoggedIn.

Editoval Antik (7. 1. 2016 20:34)

enumag
Člen | 2118
+
+2
-

Spíše bych identitu vůbec nevytvářel dokud neproběhne i druhá fáze. Tzn. kód ověřování zda uživatel existuje a heslo je správné bych z authenticatoru přesunul jinam. Pokud by údaje seděly tak bych jen uložil poznámku do session. Po druhé fázi bych teprve vytvořil identitu a přihlásil bych uživatele pomocí Nette\Security\User::login($identity);. Tzn. bych z procesu úplně vypustil IAuthenticator.

EDIT nebo možná by authenticator mohl zůstat pro tu první fázi, ale použil bych jej přímo, bez Nette\Security\User. Identitu kterou by mi vrátil bych uložil do session (ještě ne do UserStorage) a po druhé fázi bych ji teprve předal třídě User.

Editoval enumag (7. 1. 2016 20:39)

potapnik
Člen | 127
+
0
-

@enumag takto nyní taky uvažuji. Nechat projet proces autentifikatorem ale misto navraceni identity ji ulozit do session, zobrazit druhy formular a az po jeho uspesnem projeti rovnou zavolat $user->login($identity), ktera uz je overena z prvniho kroku.

GEpic
Člen | 566
+
0
-

Nevím, jestli by to tak bylo korektní, ale já jsem nad tímto také přemýšlel a já bych to řešil nejspíš takto:

V první fázi bych ověřil uživatele vlastní funkcí, která vrací pouze bool pokud jsou hodnoty správné nebo ne, pokud ano, pomocí jQuery bych formulář s první fází schoval a zobrazil druhý, přičemž bych měl stále přihlašovací údaje ale mohl bych odeslat potřebné věci v druhé fázi, tedy sms kod. Poté co by přišel SMS kod, bych teprve ověřil SMS kod a využil authenticate a následně login s redirectem…

Pouze má myšlenka, nemusí bejt vůbec správně, ale myslím, že tak by to mohlo fungovat.

Editoval GEpic (7. 1. 2016 20:47)

potapnik
Člen | 127
+
0
-

@GEpic to taky není špatný nápad, díky.

HappyFace
Člen | 162
+
0
-

GEpic napsal(a):

Nevím, jestli by to tak bylo korektní, ale já jsem nad tímto také přemýšlel a já bych to řešil nejspíš takto:

V první fázi bych ověřil uživatele vlastní funkcí, která vrací pouze bool pokud jsou hodnoty správné nebo ne, pokud ano, pomocí jQuery bych formulář s první fází schoval a zobrazil druhý, přičemž bych měl stále přihlašovací údaje ale mohl bych odeslat potřebné věci v druhé fázi, tedy sms kod. Poté co by přišel SMS kod, bych teprve ověřil SMS kod a využil authenticate a následně login s redirectem…

Pouze má myšlenka, nemusí bejt vůbec správně, ale myslím, že tak by to mohlo fungovat.

pekna myslienka ale aky je dovod si pamatat prihlasovacie udaje? .. ja by som to ponal ako prihlasovaci token.. v prvom kroku zadas meno a heslo. Po uspesnom overeni by sa ti vygeneroval kod, ktory by si poslal cez cokolvek a nasledne ked by si ho zadal tak by doslo k prihlaseniu na ucet, s ktorym by bol sparovani. ak by si to chcel riesit len na session tak by som si len pamatal ID uzivatela a kod .. aj tak po prihlaseni je z 99% potrebne z DB nacitat zvysne informacie o uzivatelovy

looky
Člen | 99
+
0
-

Koukni sem, třeba ti něco z toho pomůže https://github.com/…ette-example