Przepływy na tym samym urządzeniu i między urządzeniami wyjaśnione
Za każdym razem, gdy portfel coś potwierdza wobec strony internetowej, oba muszą się odnaleźć. Czasem są już na tym samym telefonie, a przekazanie to jedno dotknięcie. Czasem strona jest na biurku, a portfel w kieszeni, i jedynym mostem między nimi jest kod na ekranie. To przepływy na tym samym urządzeniu i między urządzeniami, a niemal każde praktyczne pytanie o cyfrowe poświadczenia sprowadza się do tego, z którym z nich masz do czynienia.
Dwie postacie tej samej wymiany
Oba przepływy łączy wszystko, co ma znaczenie dla biznesu: pada to samo pytanie, ta sama osoba je zatwierdza i wraca ten sam dowód. Ani to, o co możesz prosić, ani to, na czym możesz potem polegać, nie zależy od tego, w którym przepływie jesteś.
Różni je trasa. W jednym portfel jest na wyciągnięcie palca i oddaje odpowiedź prosto do strony, która pytała. W drugim odpowiedź wędruje z drugiego urządzenia na twoje serwery, a strona, na którą patrzy użytkownik, musi dostać informację, że dotarła.
To samo urządzenie
Jeden telefon. Strona i portfel na tym samym ekranie.
- Odwiedzający jest na stronie w przeglądarce telefonu i chce coś potwierdzić.
- Strona otwiera portfel za pomocą deep linku lub przekierowania.
- Portfel pokazuje, kto pyta i w jakim celu, a odwiedzający wyraża zgodę.
- Portfel przekierowuje z odpowiedzią z powrotem na stronę, w tej samej sesji przeglądarki, w której wszystko się zaczęło.
Między urządzeniami
Dwa urządzenia. Strona na komputerze, portfel na telefonie.
- Odwiedzający jest na stronie w przeglądarce na komputerze i chce coś potwierdzić.
- Strona wyświetla kod QR zawierający żądanie.
- Portfel na telefonie skanuje kod, pokazuje, kto pyta, a odwiedzający wyraża zgodę.
- Portfel wysyła odpowiedź do backendu strony, który informuje stronę na komputerze, że wymiana została zakończona.
Kiedy występuje każdy z nich
Nie ty wybierasz. Klient, który otwiera twoją stronę onboardingu na telefonie w drodze do pracy, jest w przepływie na tym samym urządzeniu. Ten sam klient, kończący ten sam formularz przy biurku następnego ranka, jest w przepływie między urządzeniami. Portfel mieszka w telefonie, więc przepływ podąża tam, gdzie odbywa się reszta pracy.
Dlatego oba protokoły europejskiego ekosystemu opisują oba przepływy. Prezentacja, w której prosisz kogoś o potwierdzenie czegoś, wprost nazywa dwa przepływy. Wydawanie, w którym przekazujesz komuś poświadczenie, robi to samo rozróżnienie dla oferty, która je rozpoczyna: może pojawić się na urządzeniu z portfelem albo dotrzeć dowolną inną drogą, aż po list z wydrukowanym kodem.
Usługa używana wyłącznie wewnątrz twojej organizacji, na zarządzanych komputerach, może rozsądnie wystartować z jednym przepływem. Wszystko, do czego obywatel lub klient dociera na własnych warunkach, potrzebuje obu, a usługa działająca tylko w jeden sposób zostanie zgłoszona jako zepsuta, a nie jako nieobsługiwana.
Ile każdy z nich kosztuje użytkownika
Przepływ na tym samym urządzeniu to krótsza ścieżka. Nie ma drugiego ekranu, aparatu ani momentu przenoszenia wzroku z jednego urządzenia na drugie, a użytkownik kończy tam, gdzie zaczął. Gdy zawodzi, zwykle dzieje się to wcześnie i widocznie: brak zainstalowanego portfela albo link otwiera coś, co w ogóle nie jest portfelem.
Przepływ między urządzeniami kosztuje jedno skanowanie, ale daje coś realnego. Użytkownik zostaje przy dużym ekranie, na którym wypełniał długi formularz, czytał umowę lub porównywał opcje, a na telefon przenosi się tylko sam dowód. Przy wszystkim, co wymaga więcej niż minuty pisania, to lepsze miejsce.
Jego awarie są cichsze i warto je uwzględnić w projekcie. Kod, który wygasł, gdy ktoś szukał telefonu, telefon bez zasięgu, aparat, który nie chce ustawić ostrości. Strona z kodem powinna informować, jak długo jest on ważny, oferować nowy bez utraty formularza pod spodem i nigdy nie zostawiać użytkownika w niepewności, czy coś się wydarzyło.
Gdzie naprawdę się różnią: bezpieczeństwo
W przepływie na tym samym urządzeniu odpowiedź wraca drogą, którą przeszedł użytkownik: przekierowaniem, na urządzeniu z portfelem, do sesji przeglądarki, która rozpoczęła wymianę. Ktoś, kto skopiuje żądanie z własnego ekranu, nie ma jak odebrać wyniku, bo trafia on do urządzenia, na którym wyrażono zgodę.
W przepływie między urządzeniami odpowiedź w ogóle nie wraca przez przeglądarkę. Trafia z telefonu na twoje serwery, poza zasięgiem wzroku strony, która wyświetliła kod. Na tym polega luka: jeśli nie powiążesz kodu z sesją, która go wyświetliła, twoja usługa nie odróżni osoby przed ekranem od kogoś, kto podsunął ten sam kod ofierze i czekał.
Ten atak ma swoją nazwę i swoje lekarstwo. Kod musi należeć do jednej i tylko jednej sesji, a wynik, który przychodzi dla jakiejkolwiek innej sesji, musi zostać odrzucony. To chwila namysłu na etapie projektowania i znana dziura, jeśli się to pominie, dlatego IETF napisał best current practice dla przepływów między urządzeniami, zamiast zostawiać to każdej implementacji z osobna.
Drugim ryzykiem jest phishing, i dotyczy on samego kodu. Czarno-biały kwadrat nic nie mówi o tym, kto jest po drugiej stronie, więc kod wydrukowany na naklejce i przyklejony na prawdziwy to wiarygodny atak. Obroną jest to, że to portfel, a nie kod, podaje nazwę pytającej organizacji i dokładnie wymienia, czego chce, zanim cokolwiek zostanie udostępnione. Wydawanie dodaje jeszcze jedno zabezpieczenie: oferta może wymagać krótkiego kodu dostarczonego kanałem, który już zidentyfikował osobę, dzięki czemu przechwyconej po drodze oferty nie może zrealizować nikt inny.
Co to oznacza dla ciebie
Strona ufająca
Zaplanuj oba od początku. Dodatkowa praca leży we front endzie i w powiązaniu kodu z sesją, a nie w drugiej integracji, a dokładanie tego powiązania później to właśnie ta część, która się psuje.
Wydawca
Zdecyduj, jak twoja oferta dociera do ludzi. Na ekranie obok logowania, w e-mailu czy na papierze: każda droga trafia do innego przepływu, a te, które opuszczają twój kanał, wymagają osobnego kodu do realizacji.
Posiadacz portfela
Czytaj to, co pokazuje portfel, a nie to, co twierdzi strona lub kod. Portfel to jedyne miejsce, które podaje, kto pyta i czego chce, i ostatni moment, w którym możesz odmówić.
Powiązane pojęcia
Najczęściej zadawane pytania
Kto decyduje, który przepływ zostanie użyty?
Decyduje sytuacja, a nie ustawienie. Jeśli osoba jest już na urządzeniu, na którym ma portfel, strona przekazuje ją bezpośrednio. Jeśli siedzi przy komputerze, a portfel ma w kieszeni, jedynym pomostem jest kod do zeskanowania. Usługa otwarta dla wszystkich spotka się z oboma przypadkami już w pierwszym tygodniu.
Czy obsługa obu oznacza budowanie wszystkiego dwa razy?
Nie. Żądanie, które wysyłasz, i odpowiedź, którą sprawdzasz, są w obu przypadkach takie same. Różni się tylko sposób, w jaki żądanie trafia do portfela, i to, jak odpowiedź wraca na twoją stronę: przekierowanie, za którym podąża przeglądarka, albo kod na ekranie plus sposób, by strona dowiedziała się o zakończeniu wymiany. W praktyce to jedna dodatkowa ścieżka we front endzie, a nie druga integracja.
Czy użycie kodu QR jest tu bezpieczne?
Jest bezpieczne, jeśli wymiana wokół niego jest dobrze zbudowana. Sam kod nic nie mówi o tym, kto pyta, więc muszą być spełnione dwa warunki: portfel musi pokazać tożsamość pytającej organizacji, zanim cokolwiek zostanie udostępnione, a twoja usługa musi odrzucić odpowiedź, która przychodzi dla innej sesji niż ta, która wyświetliła kod. Oba są standardową praktyką i oba są opisane w specyfikacjach.
Czy weryfikacja przy okienku to przepływ między urządzeniami?
Nie, to trzeci przypadek. Zarówno przepływ na tym samym urządzeniu, jak i między urządzeniami opisują wymianę przez internet. Weryfikacja twarzą w twarz, z dwoma urządzeniami trzymanymi obok siebie, korzysta zamiast tego ze standardu zbliżeniowego przez Bluetooth lub NFC. Dla osoby z telefonem wygląda to podobnie, ale nic nie przechodzi przez twoją stronę.
Źródła
Ta strona ma charakter informacyjny i nie stanowi porady prawnej. Wiążących wskazówek szukaj bezpośrednio w specyfikacjach OpenID i IETF.