OAuth 2.0 в микросервисах: когда сервер ресурсов связывается с другим сервером ресурсов - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время пользователь передает токен доступа с [Область A] на веб-портал.Когда пользователь запрашивает просмотр ресурса, токен передается на сервер ресурсов [Web App A] для получения ресурса.Однако для получения ресурса сервер ресурсов должен связаться с [Веб-приложение B] для получения подмножества информации, поэтому для него требуется [Область B].Поскольку пользователь только авторизовал [Scope A], вызов не удастся.

Ниже приведены сценарии исправлений, которые можно применить:

  • Сценарий 1: пользователю предлагается авторизовать [ScopeA] и [Область B].Проблема в том, что пользователь может не захотеть, чтобы [веб-портал] имел прямой доступ к [веб-приложению B].
  • Сценарий 2: [веб-приложение A] становится клиентом [веб-приложения B], используя егособственный токен доступа для запроса ресурсов у [Web App B].Проблема в том, что пользовательский контекст потерян.

Я ищу стандартное решение, возможно, что-то не так с моей стороны.

enter image description here

Несколько других вопросов, которые я хотел бы задать:

  • Следует ли передавать токен доступа вокруг микросервисов?
  • Должна ли существовать другая структура авторизациидля внутренних запросов?

1 Ответ

0 голосов
/ 12 сентября 2018

Если это разные приложения (для пользователя), то да, пользователя следует попросить подтвердить, хочет ли он авторизовать A для доступа к B. Если он не хочет этого, то у A нет делового разговора с B на от имени указанного пользователя.

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

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

Должен ли токен доступа передаваться по микросервисам?

Да, в этом не должно быть никакого вреда. Это добавляет к полезной нагрузке, но, безусловно, может быть сделано. Важно отметить, что токены доступа пользователей могут использоваться службами для имитации вызова пользователя к другой службе. Если такие вызовы представляют угрозу для вашего дизайна, то вам следует пересмотреть. Но в основном мы чувствуем, что все, что вы делаете в пределах вашей границы, безопасно, и вы можете доверять другим службам на этой границе и, следовательно, можете передавать их.

Должна ли быть другая структура авторизации для внутренних запросов?

Зависит от того, хотите ли вы разделить его по соображениям безопасности, если можете сделать это по причине загрузки.

Вы также можете подумать об удалении токенов на шлюзе (проверьте токен в точке входа) и отпустите его. Для систем, где вы можете доверять другим сервисам (среди ваших микросервисов) и гарантировать, что никто не сможет получить к ним прямой доступ, кроме шлюзов API, вы можете просто отпустить токен. Вы теряете немного авторизации, но опять же наша точка зрения заключается в том, что мы доверяем сервисам и считаем, что они знают, что они делают, поэтому мы не накладываем ограничений на такие вызовы.

...