Как вызвать веб-API под определенным пользователем разрешением?
У меня есть функция, которая позволяет конечному пользователю выполнить Workflow
(содержит много API) или запланировать его запуск в качестве фонового задания.
Пример: User1
создает Workflow1
, который содержит 3 API (Api1
, Api2
, Api3
) и настраивает его на работу в 9 утра каждый день.
я использую HttpClient
называть каждый API следующим образом:
var client = new HttpClient { BaseAddress = new Uri("http://localhost/") };
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
HttpResponseMessage response = client.PostAsJsonAsync("/api/services/myApp/workflow/Api1?input=something", "").Result;
Как мне добавить учетные данные User1
на запрос, пока пользователь не вошел в приложение (потому что оно будет автоматически запускаться как запланированное задание)?
Обновление 1
Я решил использовать рефлексию для вызова API по имени строки.
В случае непосредственного выполнения API, как запустить его с определенным разрешением?
Обновление 2
Я положил свой код внутри using
блок, но все API были запущены успешно:
using (_session.Use(1, 3)) // 3 is the Id of User1, who has no permissions
{
// Execute operator
switch (input.Operator.Type)
{
case "api":
executeApiResult = await ExecuteApi(input);
break;
case "procedure":
executeApiResult = await ExecuteProcedure(input);
break;
default:
return new ExecuteOperatorOutput
{
Result = new ExecuteOperatorResult { Status = false, Message = $"Wrong operator type: {input.Operator.Type}" },
WorkflowStatus = false
};
}
}
2 ответа
В случае непосредственного выполнения API, как запустить его с определенным разрешением?
Вы можете переопределить текущие значения сеанса и вызвать свой метод внутри using
блок.
Я положил свой код внутри
using
блок, но все API были успешно запущены
Объявите ваши методы API как public virtual
поскольку есть некоторые ограничения для AbpAuthorize
,
У вас есть два варианта.
1- Вы можете сделать эти Сервисы приложений анонимно доступными. И если вы хотите, чтобы он был безопасным, отправьте зашифрованный маркер безопасности.
2- Вы не упомянули, является ли ваш проект MVC или Angular. Я предполагаю, что у вас есть угловая версия Вам нужен токен на предъявителя для выполнения аутентифицированных запросов. Сначала вы должны аутентифицировать пользователя и получить токен. Затем добавьте этот токен на каждый запрос.
Вы должны исследовать использование токенов на предъявителя в ядре asp.net...