Sebastiaan Meijerink Ответов: 1

Доступ к другому 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 раз, и этот токен будет приемлем для обеих служб.

1 Ответов

Рейтинг:
5

Thomas Nielsen - getCore

Для того, что вы пытаетесь сделать, подключаясь от одной веб-службы к другой службе без использования сквозной аутентификации, кажется, вам нужно будет аутентифицировать использование этой службы другим способом.

Так что всегда есть indigo или WCF, как его стали называть. Windows Communication Foundation - это корпоративный "серьезный" способ объединения корпоративных служб. он поддерживает целый ряд протоколов и методов аутентификации, один из которых authenticatino by certificate и в основном дает вам возможность создать свой собственный сертификат X509 и зарегистрироваться на обеих конечных точках (точках доступа к службе), а затем, по сути, вы обходите аспект учетных данных пользователя, используя этот метод аутентификации машины.

Веб-api, по сути, предназначен для обслуживания клиентов, запрашивающих http или https. WCF может использовать целый ряд протоколов, например net. tcp, который намного быстрее с точки зрения отсутствия раздувания http ... не заставляйте меня начинать с этого :))

Во всяком случае, чтобы продолжить в вашем случае, что ваш хост web api аутентифицируется на другой вашей службе с помощью сертификата высокой безопасности, нашел эту статью, я думаю, поможет вам, и если нет, то веб переполнен примерами.

Девять простых шагов для включения сертификатов X. 509 в WCF[^]

Есть также кто-то, кто делает это для запросов веб-api и в конечном итоге преуспевает, но я сомневаюсь, что это не займет много дополнительной работы от вашего имени, особенно если вы используете ajax c# - как использовать сертификат клиента для аутентификации и авторизации в веб-API-переполнение стека[^]