Оптимальный дизайн и архитектура для мультитенантной системы OAuth2 с несколькими источниками - PullRequest
0 голосов
/ 17 февраля 2020

Мне нужен совет и помощь по архитектуре системы OAuth2. Раньше я не создавал ничего подобного, поэтому даже просто придумать сам OAuth2 в качестве решения, а затем разработать рабочий процесс, описанный ниже, было непросто. Теперь у меня есть рабочий процесс, но я в настоящее время застрял на архитектуре. Это длинный пост, но, пожалуйста, прочитайте, если можете. У меня есть несколько вопросов в конце.

ОПИСАНИЕ ПРОЕКТА

Я пытаюсь разработать механизм аутентификации и авторизации OAuth2 для школьной системы в небольшой стране. Я ищу советы по архитектуре и настройке системы, так как я не самый лучший в архитектуре программного обеспечения с участием нескольких арендаторов. Конечным продуктом является API-интерфейс Oauth2, который позволяет сайтам и приложениям проверять свою личность учащихся, используя их идентификатор и PIN-код ученика, а затем соответствующим образом назначать разрешения для указанных приложений.

ТЕКУЩАЯ НАСТРОЙКА

Как это настроено в настоящее время, в каждой школе есть уникальный короткий код, который учащиеся набирают, чтобы получить доступ к услугам через USSD-меню на мобильных телефонах. То есть со своих мобильных телефонов ученик набирает короткий код, например * 125 # (уникальный для каждой школы), а затем появляется меню с параметрами: 1) Результаты 2) Баланс сборов 3) Расписание занятий

Чтобы просмотреть любой из пунктов меню при выборе, ученик должен ввести PIN-код, который он выбрал, когда он зарегистрировался в школе. После успешного ввода PIN-кода они могут видеть такие вещи, как их результаты и c.

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

Желаемый рабочий поток

Итак, как это, никакие внешние приложения не могут получить доступ к ресурсам ученика. Это то, что я хочу построить. Я хочу создать API аутентификации, авторизации и выборки, который позволит другим приложениям, сайтам и разработчикам получать разрешение от учащихся на доступ к их ресурсам из школы (предположим, что школы будут играть вместе, пока установка безопасна). Учащийся должен иметь возможность go использовать внешнее приложение, которое затем запрашивает разрешение на получение данных учащихся из их школы, например, «Результаты». После того, как студент предоставит разрешение, приложение сможет извлечь необходимые данные.

По соображениям безопасности я не хочу трогать или в любой момент видеть или иметь ПИН студента. Поэтому я думаю, что это должно работать так, используя OAuth2. Опять же, при условии, что школа подыгрывает. Я бы представил четвертую USSD-запись под названием «Авторизовать приложение» для меню ученика в предложениях USSD для школы. Для доступа к его содержимому также потребуется ПИН-код, как и другие параметры. Таким образом, все будет выглядеть следующим образом:

1) Веб-приложение требует разрешения для доступа к данным результатов для студента 2) Появляется диалоговое окно, в котором студент может ввести свое полное имя и номер телефона 3) Система генерирует 6-ди * Код 1058 *, который отправляется на номер мобильного телефона и будет доступен только через параметр USSD-меню «Авторизовать приложение», для которого также потребуется ввод PIN-кода. 4) Появится диалоговое окно, в котором студент может ввести код 6-ди git. отправил их. В нем должны быть инструкции, чтобы они могли набрать школьный шорткод * 125 # и получить код, используя пункт меню «Авторизовать приложение». 5) Учащийся вводит ПИН-код и получает код 6-ди git и вводит его в диалог веб-приложения. вставка 6) Приложение получает разрешение на выборку данных из школьной базы данных

***. Этот рабочий процесс, поскольку для него требуется PIN-код, служит для проверки личности учащегося, а затем позволяет им предоставлять разрешения на определенные данные. как и любой другой поток OAuth2, например «Войти через Google» или «Войти через Facebook»

ВОПРОСЫ ДЛЯ ДИЗАЙНА И АРХИТЕКТУРЫ

Итак, теперь, когда у вас есть представление о том, что я пытаюсь построить, я хочу знать, как мне лучше всего настроить мою систему OAuth2.

Мне кажется, я мог бы сделать это с одним сервером OAuth2 и затем рассмотрите каждую школу как отдельный источник данных, но я не знаю точно, как я настроил бы это или go об этом, или даже если OAuth2 позволяет это. Я знаю, что в первую очередь стоит попробовать что-то, но это довольно большая задача, и из-за больших временных затрат мне бы очень хотелось просто встать на ноги в правильном направлении. Пожалуйста, потерпите меня.

1) Возможно ли это?

2) Как работает OAuth2 для мультитенантных систем? Может ли один сервер OAuth2 генерировать, управлять и организовывать токенизацию и авторизацию для нескольких защищенных баз данных?

3) Должен ли я предоставить каждой школе свой собственный сервер?

4) Как бы вы идеально это настроили?

Мне бы очень хотелось услышать вашу критику и получить некоторые оптимизации для этой архитектуры.

...