Доступ к другому webapi на том же сайте
Привет,
В нашей настройке продукта у нас есть несколько отдельных веб-сервисов, которые размещаются как один сайт.
Веб-сервисы поступают из отдельных проектов .NET. Это делается для того, чтобы все веб-сервисы можно было поддерживать как отдельные продукты с отдельными версиями выпуска.
Они устанавливаются вместе на одном сайте в виде веб-приложений под этим сайтом.
/сайт / webserviceA
/сайт / webserviceB
Проблема, с которой мы сталкиваемся, заключается в том, что иногда webserviceA требует вызова webserviceB.
Но как вы это делаете? Сайт /site требует от пользователя входа в систему.
Далее у нас есть hangfire, который запускает задания в фоновом режиме. Этот процесс будет выполняться под учетными данными пользователя пула приложений. Который не добавляется в группу, которой разрешен доступ к сайту.
Есть пользователь-администратор. И мы можем выбрать это у поставщика членства, но как мы передаем учетные данные?
Что я уже пробовал:
Сейчас мы просто создаем временного пользователя с сгенерированным паролем.
Войдите в систему с этим пользователем через веб-клиент с поддержкой файлов cookie.
Сделай звонок.
Удалите пользователя.
Это работает, но это не может быть правильным способом сделать это.
Thomas Nielsen - getCore
Разве не работает просто поставить [authorize] на службы и использовать путь для маршрутизации, а остальное пусть .net обрабатывает? Это совершенно стандартно-определять службы в библиотеках и просто создавать их экземпляры, не имеет отношения ни к чему, кроме того, что личность авторизована, и это будет так, если пользователь вошел в систему, кто вам нужен, чтобы явно справиться с ситуацией входа в систему, поскольку она относится к службам, разве ваши пользователи не имеют доступа к использованию службы?
Sebastiaan Meijerink
Мне нужно вызвать один веб-сервис из другого внутри самого кода C#. Не с точки зрения клиента.
Thomas Nielsen - getCore
Но у вас есть цепочка вызовов с аутентифицированной идентификацией доступа к вашей первой услуге?
Первая служба работает с атрибутом [Authorize]??
Sebastiaan Meijerink
Нет, если он работает в фоновом режиме. Тогда нет первого вызова службы
Thomas Nielsen - getCore
хорошо, хорошо, если вы используете webapi в первом случае, вы уже работаете асинхронно на своем веб-сайте, так что на самом деле нет никаких причин использовать фоновые службы или задачи в рамках фактического вызова метода, если это означает, что вы потеряете свою личность, не так ли? И если вы это сделаете,вы можете передать идентификационную информацию как состояние.
То, как выглядит ваш фактический код или его макет, очень важно для того, чтобы кто-то здесь мог правильно помочь :) *подсказка*
David_Wimbley
Если я правильно понял ваш вопрос. Вы говорите, что создать пользователя, проверка подлинности веб-службы Б, звоните к веб-сервису B, а затем удалить пользователя.
Почему? То есть смысл API заключается в том, что у вас есть клиенты, которые аутентифицируются в вашем API, чтобы использовать его.
Кроме того, почему бы просто не объединить ваши веб-сервисы в один веб-сервис? Может быть, вы пытались микроанизировать свои услуги до такой степени, что теперь это стало архитектурной проблемой.
В моих настройках веб-api, если мне нужно сделать вызов из отдельных служб, службы а в службу в, и обе службы а и в требуют аутентификации, я реализую аутентификацию токена носителя аутентификации, а затем в любом действии веб-api в Службе А, которое должно вызвать службу в,он просто выполняет сначала запрос Аутентификации, а затем основной запрос. Кроме того, до этого я бы настроил пользователя в Службе B таким образом, чтобы я мог использовать этого пользователя/pass для запроса токена из службы B при вызове его из службы A.
Другой вариант - у вас будет api аутентификации, который разделяет машинный код между службами, так что вы можете аутентифицировать 1 раз, и этот токен будет приемлем для обеих служб.