2016-02-17 2 views
0

Служба B - это многопользовательский API.Как обрабатывать связь сервера с сервером для многопользовательского отдыха api?

Служба A - это служба, которая должна выполнять работу от имени любого арендатора.

Что вы рекомендуете для аутентификации/авторизации A -> B связи?

Текущая настройка службы B (остаточный API): все данные находятся в одной базе данных и одной схеме с столбцом идентификатора арендатора в каждой таблице. Мы используем oauth 2, чтобы дать пользователям доступ к токенам после входа в форму. Маркер доступа включает требование, в котором есть идентификатор арендатора. Когда пользователи делают запросы, мы выясняем их идентификатор арендатора из заявки и добавляем этот идентификатор арендатора как часть предложения «где» для извлечения только своих данных.

Теперь скажите, что служба A должна выполнить некоторую работу для арендатора «foo». Наивный подход заключается в том, чтобы войти в систему как пользователь, связанный с арендатором «foo» и отправить этот токен доступа.

Любые лучшие подходы?

+0

Если вы уже используете oauth2, не можете обслуживать A, просто получите «правильный» билет через oauth для доступа к сервису B от имени пользователя? –

+0

Да, это то, что мы делаем сейчас. Но это означает, что каждый раз, когда Служба А должна выполнять работу для другого арендатора, ей нужно получить новый токен. В идеале я бы хотел, чтобы он получил один токен и просто получил разрешение на доступ к любым данным от любого арендатора. Это похоже на то, что поток учетных данных клиента может быть тем, что я хочу ... https://tools.ietf.org/html/rfc6749#section-4.4 –

ответ

1

Client Credentials Flow

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

Например, если служба A и B являются «собственными» данными, то клиент, служба A, фактически является внутренним клиентом.

Если услуга A является третьей стороной, то вы находитесь в серой области, если вы возвращаете данные уровня пользователя.

Предполагая также, что служба B не будет зависеть от идентификатора арендатора и идентификатора пользователя в качестве требования в токене, чтобы конечные точки работали правильно.

ресурсы Владелец Пароль поток

Если у вас есть сервер личных данных можно создать специальную учетную запись для каждого арендатора в пользователе базе данных и услуги А можешь использовать пароль поток ресурсов Владельца (https://tools.ietf.org/html/rfc6749#page-9) и поставьте специальный пользователь и пароль на сервер авторизации, чтобы получить идентификатор токена и арендатора без необходимости входа в систему. Я видел это, но мне это не нравится или рекомендую!

+0

Да, это будет внутренний клиент. Оба имеют данные. «Предполагая также, что служба A предоставит идентификатор арендатора в качестве требования в токене ...» Выполнение этого означает, что службе A необходимо будет получить новый токен каждый раз, когда он будет работать для другого арендатора. Я думал о добавлении идентификатора арендатора в качестве отдельного заголовка или в качестве части URL-адреса, чтобы избежать этого. Мысли? –

+1

Вы правы - не знаете, почему я добавил, что, поскольку я фактически имею в виду практически противоположное! Я отредактирую ответ. Если вы можете изменить api, чтобы идентификатор арендатора был частью сообщения о конечной точке или обработал его из заголовка HTTP, у вас будет 1 сценарий токена, который вы хотите. – iandayman

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