Как бороться со следующим сценарием в Oauth2? - PullRequest
0 голосов
/ 13 января 2020

Предположим, у меня есть API-интерфейсы, указанные ниже:

/app/user_info
/app/car_info

Система способна создавать различные филиалы, что-то вроде: департамента, филиала, в нашей системе это филиальная школа

Предположим, у нас есть:

BranchA
BranchB

API-интерфейсы ориентированы на ветви. Он будет отображать данные в соответствии с текущим идентификатором ветви, который выбран текущим зарегистрированным пользователем, который переключает другую ветвь в интерфейсе.

Теперь у нас есть Пользователь, который может получить доступ ко всем API в BranchA. В то же время, пользователь имеет ограниченные права доступа к API в BranchB (предположим, что пользователь может получить доступ только к /app/user_info).

1 User - BranchA -  /app/user_info,app/car_info
2 User - BranchB -  /app/user_info

Так как справиться с подобным сценарием? Каждая ветка будет соответствовать разному токену доступа, и область действия также будет разной. Так нужно ли назначать пользователю несколько токенов за одну авторизацию? Это невозможно в соответствии с OAUTH2. Чтобы решить эту проблему, я думаю, что мне нужно назначить новый токен доступа и refre sh токен, когда пользователь переключается на другую ветку? Но как назначить новый токен без повторного входа пользователя, это вопрос, который я хочу задать. У меня почти нет опыта oauth2 в этой ситуации.

1 Ответ

1 голос
/ 13 января 2020

OAuth не предоставит вам решение для авторизации с указанием домена c.

Вместо этого вам, как правило, потребуется управлять им в логике вашего приложения c, что-то вроде этого:

  • Сосредоточьте логины OAuth на идентификации пользователя, что приведет к доступу токен, содержащий идентификатор пользователя
  • В данных вашего приложения сопоставьте пользователей или роли с разрешенными ветвями
  • Создайте свой API, включив в него идентификаторы ветвей
  • Когда ваш API получит запрос, посмотрите вверх пользователя от токена и убедитесь, что вошедший в систему пользователь имеет доступ к ветви

Как пример:

  • Получить список ветвей из / branch, который будет вернуть данные для пользователя в токене
  • Получить данные для ветки из / branch / ({id} / car_info - которая выдаст 403 запрещенного ответа, если пользователь в токене не имеет доступа к запрошенному филиал
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...