![scenario diagram](https://i.stack.imgur.com/oBEYB.png)
Во время обучения OpenID Connect в следующем сценарии возникли некоторые вопросы. Большая часть документации, доступной в Интернете об OIDC / OAuth, предполагает, что к серверу ресурсов можно обращаться только от клиента в пределах одной и той же «области авторизации», что означает, что клиент и все серверы ресурсов защищены одним и тем же провайдером OID C (OP).
В данном сценарии Клиент защищен OP A и требует, чтобы Пользователь A вошел в систему на OP A, прежде чем сможет использовать Клиент. Таким образом, Клиент также получает токен доступа от OP A, который позволяет ему получать доступ к серверу ресурсов A от имени пользователя. Пока все хорошо.
Пользователь A также имеет учетную запись в области авторизации B, и клиент должен получить доступ к серверу ресурсов B, который защищен OP B.
Этот сервер ресурсов B API, который вызывает другие API в той же области авторизации B. Все эти API / серверы ресурсов ничего не знают о OID C Провайдеры за пределами своей собственной области авторизации B. Сервер ресурсов B не может быть доступен только из клиента из области A , но также из N клиентов из различных областей авторизации. В моем текущем понимании, все серверы ресурсов в области B должны принимать токены от различных OP.
Это будет означать:
- Большая конфигурация во всех API
- Каждый раз, когда добавляется или удаляется новая область, конфигурация должна обновляться для всех API
Я понимаю, что Клиент A может получить два токена доступа. Один из OP A и один из OP B. Общие библиотеки авторизации не поддерживают это «из коробки», и это увеличило бы сложность, с которой клиент должен справиться (управление / обновление нескольких токенов / отправка правильного токена в нужную конечную точку). Кроме того, мне не ясно, как будет выглядеть поток OID C при работе с двумя токенами из двух OP.
- Клиент перенаправляет пользователя на OP A для аутентификации (поскольку Сам клиент защищен OP A).
- После получения идентификатора и токена доступа пользователю разрешено использовать клиент, и у клиента есть необходимый токен для API A.
- Клиент будет также запросите токен доступа у OP B, что означает, что пользователь должен пройти аутентификацию на OP B
- . Пользователь должен будет либо указать имя пользователя / пароль на OP B, либо, если мы используем федерацию идентификации, OP B перенаправит на OP A, где у пользователя уже есть сеанс, в результате чего получается токен доступа из OP B для API B
- . Клиент будет использовать токен B для вызовов API B и токен A для вызовов API A
Существуют ли другие решения для приема запросов от Клиентов, защищенных другим OP с использованием OAuth / OID C? Очевидно, что между двумя сферами должна быть какая-то установка доверия. Но как этого достичь, не затрагивая все серверы ресурсов в области B?