Як перемістити існуючий спадщинний веб-сайт для використання OAuth2


10

Наразі у мене є 15-річний застарілий монолітний веб-сервер з близько 1 мільйона користувачів, який використовує домашню систему авторизації та автентифікації: JAAS, імена користувачів і pwds зберігаються в БД з базовим хешуванням паролів, деякі питання особистої перевірки 2FA (з різними алгоритми хешуваннявання тощо).

Я буду ремонтувати додаток протягом наступних 12-18 місяців, головним чином зосереджуючись на інтерфейсі користувача, але також повільно модернізуючи основні частини (оновлення до Spring, Spring Security тощо). У рамках цього проекту ми вирішили вирішити питання оновлення користувальницького інтерфейсу на основі модуля за модулем; надання кожному модулю після його завершення; ідеальна можливість розбити моноліт на окремі веб-сайти (всі підтримують однаковий дизайн UX).

Там, де я застряг, намагаючись планувати це, знаходиться на рівні аутентифікації та авторизації. Мені потрібно наскрізне рішення, яке матиме дугу над усіма модулями, так що коли користувач переходить з одного веб-сайту в інший, це безперебійний перехід - вони навіть не знають, що вони знаходяться на різних веб-сайтах. OAuth2 звучить як ідеальне рішення.

Я застряг, намагаючись зрозуміти, як це інтегрувати. Чи потрібно будувати власний власний сервер OAuth2? Це вражає мене, як жахлива ідея. Але як мені:

  1. перенести всі мої облікові записи користувачів та процес авторизації на сторонній сервер OAuth2
  2. налаштувати зовнішній вигляд і відповідати решті моєї програми (не впевнений, наскільки легко / ймовірно це буде)
  3. не допустити типового спливаючого вікна "Application XYZ бажає дозволу на доступ до вашого облікового запису ..." під час підключення через сторонній сервер? (наприклад: Google OpenID, Facebook тощо).

Моя мета - забезпечити безперебійний перехід для користувача з поточного стану в новий стан, але надання можливості створювати окремі веб-карти, які всі аутентифікуються та авторизуються за межами веб-сайту.


Цікаво, чи вистачить ССО. OAuth не здається мені такою системою, яка вам тут потрібна. Погляньте на CAS
Laiv

Відповіді:


2

Розкриття інформації : Я інженер в Auth0 .

Це залежить від одного головного моменту ... вам потрібно вирішити, чи:

  1. Ви хочете безпосередньо витратити значну кількість часу (і опосередковано витратити гроші) на створення та / або підтримку власного постачальника даних та сервера авторизації
  2. або ви віддаєте перевагу безпосередньо витрачати гроші та використовувати стороннього постачальника аутентифікації, наприклад Auth0.

Обидва варіанти є цілком життєздатними з точки зору ваших функціональних потреб. Завдяки спеціальній розробці ви повністю контролюєте функціонал, який ви вирішили підтримувати, тому я зосередив частину відповіді на тому, як Auth0 може відповісти на вказані вами вимоги .

Однак перед тим, як переходити до цього, незалежно від вашого рішення, для аутентифікації слід зосередитись на OpenID Connect замість OAuth2. Останнє буде більш застосовно, якщо ви плануєте також мати API в суміші, а не просто розділити моноліт на окремі веб-програми.


Як перенести існуючих користувачів до системи на базі Auth0?

Ви можете вирішити, як продовжувати використовувати свою базу даних, і покластися на Auth0, щоб забезпечити всі відповідність протоколам, пов’язаним з автентифікацією, які можуть вам знадобитися, або ви можете перенести своїх користувачів до керованих Auth0 баз даних і перестати турбуватися про збереження та перевірку паролів.

Якщо ви віддаєте перевагу продовжувати використовувати свою базу даних, перегляньте розділ Аутентифікація користувачів з ім'ям користувача та паролем за допомогою користувацької бази даних

Програми часто покладаються на бази даних користувачів для аутентифікації. Auth0 дозволяє легко підключатися до цих сховищ та використовувати їх як постачальників ідентифікацій, зберігаючи облікові дані користувачів та надаючи безліч додаткових функцій.

(Документи називають MySQL лише прикладом, підтримуються інші двигуни бази даних)

З іншого боку, ви можете легко переміщувати облікові дані користувачів до баз даних Auth0, використовуючи процес міграції, описаний у програмі Migrate Users, до Auth0

Auth0 підтримує автоматичну міграцію користувачів на Auth0 із підключення до бази даних. Ця функція додає ваших користувачів до бази даних Auth0 одночасно під час кожного входу та уникає прохання користувачів одночасно скинути свої паролі.

Ви також можете створити всіх своїх користувачів в Auth0 за допомогою API управління, якщо ви хочете, щоб усі вони почали використовувати наш алгоритм хешування паролів відразу. Це має побічний ефект від того, щоб вимагати від користувачів скидання пароля.

Як продовжувати користуватися двоступеневою автентифікацією (питання підтвердження)?

Трубопровід аутентифікації, наданий Auth0, повністю настроюється за допомогою правил . Це означає, що, хоча вам і не доводилося реалізовувати будь-які матеріали, пов’язані з протоколом, ви все одно можете точно налаштувати дрібні деталі того, як відбувається автентифікація у вашій програмі.

Сюди входить можливість продовжувати використовувати наявні питання підтвердження як спосіб здійснити двоетапний процес аутентифікації, коли користувач надає початковий пароль, перевірений Auth0, а потім ви запитаєте їх для отримання додаткової інформації з користувацького правила. (правила - це лише Javascript, тому можливості безмежні)

Однак ви також можете вирішити скасувати питання підтвердження і замість цього перейти з Auth0 Guardian як спосіб підвищити безпеку процесу автентифікації.

Як налаштувати зовнішній вигляд інтерфейсу аутентифікації?

За допомогою Auth0 ви можете мати чистий інтерфейс автентифікації в найкоротші терміни, використовуючи сторінки для входу за замовчуванням або віджети автентифікації на зразок Lock . Всі вони підтримують певну ступінь налаштування, і ви завжди можете вирішити зробити свій власний інтерфейс самостійно і замість цього використовувати бібліотеки Auth0 нижнього рівня ( Auth0.js ), які не обмежують користувальницький інтерфейс.

Для отримання додаткової інформації про налаштування:

Як не допустити явної сторінки згоди?

Ви можете використовувати Auth0 як постачальник ідентифікаційних даних для цілей аутентифікації, а також як сервер авторизації OAuth2 (на даний момент доступний лише в регіоні США) для своїх API.

Як постачальник ідентифікаційних даних вам не потрібно турбуватися про сторінки згоди, користувач автентифікується за допомогою своїх облікових даних, якими керує Auth0, а потім переспрямовується на вашу програму - це все.

У OAuth2 як сценарій обслуговування, коли згоду включено, дорожня карта включає можливість обходу сторінок згоди для певних програм.


Зрештою, це здається дуже цікавим та складним проектом, який ви потрапили туди, тож удача незалежно від вашого остаточного рішення.

Я вже проходив щось подібне на попередній роботі, коли мені довелося повторно впровадити систему аутентифікації застарілого додатка. Ми реалізували власного постачальника ідентифікаційних даних і сервер авторизації, і якщо чесно, я все ще відчуваю, що ми, можливо, забули щось дійсно важливе.

Я думаю, що це найбільша проблема з прокруткою власної безпеки. Будуть випадки, коли строки накладають ярлики, а безпека насправді не є хорошою областю для створення ярликів.

Якщо у вас є додаткові питання, повідомте мене, якщо ви вважаєте, що я можу бути корисним.


Дякую за всі подробиці. Я пам'ятаю, як дивився на Auth0, але з того, що я можу сказати, Auth0 - це лише хмара; це правильно? З міркувань безпеки та конфіденційності я обмежений переглядом лише рішень, які я можу розмістити у власному центрі обробки даних / особистому хмарі. Чи надає Auth0 такий варіант?
Ерік Б.

Так, Auth0 дуже гнучка в плані розгортання / хостингу. Наразі непублічне хмарне рішення відоме під назвою Auth0 Appliance, і його можна розгорнути або у виділеній області хмари Auth0, у вашій хмарі чи у власному центрі обробки даних . Перевірте Appliance документи для отримання додаткової інформації. Якщо вам потрібна більш детальна інформація, дайте мені знати, я можу або спробувати допомогти вам безпосередньо, або вказати на потрібних людей.
Жоао Анжело
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.