Door
- Ariën -
op 12-06-2022 17:45
gewijzigd op 10-08-2022 23:51
8.473 views
Ik ben bezig met een 2FA-systeem voor bij het inloggen. En nu vroeg ik mij af of iemand een goede methode of package kent om een device als veilige device te herkennen.
Facebook gebruik dit ook als je met 2FA inlogt, en je dan kan aangeven dat 'dit een veilige device is' waarbij er dan geen 2FA wordt gevraagd.
Ik zou wel willen reageren als ik begreep wat je precies bedoelt met 'om een device als veilige device te herkennen'.
Gaat het om het vaststellen dat een bepaalde partij het apparaat als veilig heeft bestempeld?
Of wil je een technische check doen en voor jezelf vaststellen dat het apparaat veilig is?
En veilig waarvoor?
Als ik het goed begrijp, bedoelt Ariën:
Een apparaat waarvan de gebruiker eerder heeft aangegeven dat het bij zijn/haar account hoort en waarbij tijdens het inloggen om die reden geen 2-factor-authentication (2FA) hoeft plaats te vinden.
(Ariën, correct me if I'm wrong.)
Een simpel voorbeeld. Ik ben ingelogd op een website waarbij normaliter 2FA plaatsvindt. Ik ga naar mijn klantenpaneel en druk op de knop "dit apparaat is veilig". De volgende keer dat ik op dat apparaat inlog, vindt er geen 2FA plaats.
Maar oAuth is weer een hele standaard voor een compleet login-systeem. Die gebruik ik niet voor mijn CMS, en vind ik iets teveel moeite om in te bouwen ;-)
Ik kan eens kijken hoe die Device Authorization Grant werkt. Want het lijkt me dat zo een proces/flow ook los zou moeten werken van oAuth 2.0.
?Onbekende gebruiker
23-08-2022 10:23
gewijzigd op 23-08-2022 10:34
Als je het idee van een kant-en-klare package los hebt gelaten en gaat kijken naar een eigen implementatie van hoofdstuk 3 in RFC 8628, dan gaat het alleen maar over 5 pagina's in hoofdstuk 3 waarin beschreven wordt wat er precies gecommuniceerd moet worden. Er staat niet in hoe je dat precies moet implementeren, in plaats daar van is hoofdstuk 5 toegevoegd met allerlei beveiligingsadviezen.
Even hardop denken.. het authenticatieschema is verdeeld over minimaal 3 services: een authenticatieserver, een app die toegang wil, en een andere app (als een browser) waarmee de toegang voor de eerste app bevestigd moet worden. Het maakt in theorie niet uit of dat op hetzelfde apparaat is of niet, maar vaak is dat wel zo, daarom gaat communicatie over HTTPS.
Het doet mij sterk denken aan het proces van Let's Encrypt: via certbot vraag je een certificaat aan bij Let's Encrypt (authenticatieserver) en die geeft het certificaat (een soort 'token' met beperkte geldigheid) pas uit nadat een challenge (bevestiging) is gelukt. Dit challenge is dan ook het echo'en van een bepaald token.
Interessant idee om het apparaat mee te nemen in de identificatie. Ik heb zelf eerder 2FA geïmplementeerd met cryptografische sleutels. Maar dan moet je zelf bij elke inlogpoging het bestand mee sturen. Zoiets kan je dus verder automatiseren met een client certificate dat bij elke inlogpoging vanzelf wordt meegestuurd.
Als je het al via een library zou willen doen, staan er op https://oauth.net/code/php een aantal, daar zou je in moeten grasduinen om te zien of de Device Flow wordt ondersteund. Maar die kans acht ik nog niet groot gezien de 'proposed standard' status van de RFC.
Als dat zo is zit er niets anders op om het zelf te implementeren. Dan zou ik het proberen te doen via client certificates, zodat je voor tokens en validatie OpenSSL kan inzetten.
Je kunt zelf nog besluiten of je het hele protocol van de RFC overneemt, of dat je daar een eigen draai aan geeft.