Я занимаюсь разработкой микросервиса на C ++ (по причинам низкой задержки) и начинаю погружаться в OpenID и Keycloak. Разработка на C ++ означает, что у меня почти нет поддержки библиотек для OpenID, но у меня (надеюсь) работают все детали низкого уровня (например, правильная проверка JWT). Я должен сделать все потоки связи и перенаправить себя.
Столько, сколько фона. Имейте это в виду, потому что мне нужно знать и реализовывать детали, которые библиотека обычно скрывает для разработчика.
В моем приложении три стороны:
- Веб-клиент W
- Микросервис A
- Микросервис B
Общая связь между этими тремя: веб-клиент W может быть либо интерфейсом внешнего интерфейса, либо мобильным устройством, использующим только API в качестве службы без какого-либо интерфейса. W подключается к микросервису A, чтобы манипулировать данными и использовать их. Микросервис А обменивается данными с микросервисом В и наоборот. W не нужно знать о B.
До сих пор я думал о следующей архитектуре:
- Для Web-клиента на Microservice Связь, которую я использовал бы для выделенных пользователей и клиентов с тип доступа «Publi c» в Keycloak, чтобы разрешить входы пользователя / pw
- Для связи между микросервисом A и микросервисом B я бы использовал носитель типа доступа, потому что они никогда не инициируют вход в систему
Пожалуйста, сообщите, если вы считаете, что это звучит неправильно. Однако мой реальный вопрос заключается в том, какой тип потока регистрации требуется и какой шаг между ними я могу пропустить:
Можно ли иметь конечную точку для входа в систему? микросервис A https://servicea.local/login, который перенаправляет запросы веб-клиента на OpenID / Keycloak. Например, веб-клиент отправляет имя пользователя, пароль, идентификатор клиента и тип предоставления на конечную точку запроса токена OpenID http://127.0.0.1: 8080 / auth / realms / somerealm / протокол / openid-connect / token ?
Должен ли клиент взять токен и добавить его ко всем последующим вызовам в качестве токена авторизации?
Должен ли микросервис реализовать обратный вызов для получения информации об авторизации?
Следует ли вместо этого изменить поток, чтобы клиент мог обслуживать связь код доступа к сервису, которым он обменивается с токеном доступа?