2015-05-13 3 views
1

Предположим, что у нас есть несколько (безгарантийных, основанных на HTTP) (микро) сервисов и множество «демонов», которые выполняют все виды фоновой обработки, фактически используя указанные службы.Авторизация и аутентификация с использованием кросс-микросервиса

Теперь я хочу иметь способ для сервисов и демонов, чтобы иметь возможность взаимно аутентифицировать и разрешать. Например, демон, который выполняет полнотекстовую индексацию Заказов потребностей:

  • только для чтения доступа к Заказам, Клиентами (который сам нуждается доступ только для чтения к компаниям услуг) и Inventory услуги
  • читать и писать доступ к службы OrdersSearch для того, чтобы иметь возможность обновить полнотекстовый индекс.

Существуют также приложения, которые действуют «от имени» пользователя. Например, веб-приложение Inventory нуждается в , чтобы прочитать и написать доступ к службе , ноИнвентарь сам сервис должен проверить разрешения пользователя, работающего с приложением.

Все, что сказано, как мне достичь того, что я только что описал? Я бы предпочел не использовать гигантские рамки или стандарты предприятия. Из того, что я читал, Two-Legged OAuth2 - это то, что мне нужно, но я не совсем уверен.

Я был thinkinking в создании службы авторизации, который будет использоваться, чтобы ответить на такие вопросы, как: «Эй, я Inventory службы. Какие права на клиентов сервис, который звонит мне прямо сейчас имеет для меня? », но это имеет два основных недостатка в распределении общих секретов.

+0

Как проходит аутентификация пользователя? –

+0

@JoseMartinez В настоящее время на всех веб-серверах используется стандартная аутентификация с использованием пароля для входа в систему, нет видимых WIF или SSO –

+0

См. Мой ответ: http://stackoverflow.com/questions/32574103/microservices-how-to-solve-security-and-user- аутентификация – Akira

ответ

2

Аутентификация:

Я представляю службу аутентификации, где запрашивающий API подписывает свой запрос с использованием установленного протокола: например, конкатенируя части запроса с помощью ИДЕНТИФИЧЕСКОГО ИСКЛЮЧЕНИЯ И ИДЕНТИФИКАЦИИ ИДЕНТИФИКАЦИИ, а затем хеширует его для создания подписи. Эта подпись затем зашифровывается с помощью закрытого ключа. Все запросы должны содержать эту зашифрованную подпись и NONCE, а также идентификатор приложения. Затем служба приема выполняет поиск открытого ключа запроса запрашивающего приложения. После проверки, что NONCE не истек, принимающая услуга расшифровывает дайджест с использованием открытого ключа и проверяет подлинность подписи (путем повторения процесса подписания и перехода к той же самой сигнатуре). Для получения открытого ключа потребуется услуга. Служба может кэшировать идентификатор приложения для сопоставления открытого ключа.

Авторизация:
Это может быть сделано с использованием какой-либо схемы role based access control. Другая служба может использоваться для поиска того, имеет ли запрашивающая служба доступ к запрашиваемым ресурсам.

Я думаю, что авторизация и аутентификация могут выполняться внутренне, в зависимости от времени и денег и необходимости специализации. Если вы используете Java, взгляните на Spring Security. Если вы решите создать собственный код, пожалуйста, оправдайте его для своих менеджеров и получите покупку.Сделайте тщательный поиск в Интернете для любого другого решения и включите в свой отчет о том, почему он не подходит, и что требуется индивидуальное решение.

Смежные вопросы