如何在特定用户权限下调用web API?

How to call web API under specific user permission?

我有一个功能允许最终用户执行 Workflow(包含许多 API)或将其安排到 运行 作为后台作业。

示例:User1创建Workflow1,其中包含3个API(Api1Api2Api3),并配置每天早上 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,如何在特定权限下运行呢?

更新 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
            };
    }
}

你有两个选择。

1- 您可以匿名访问这些应用程序服务。如果您希望它安全,请发送加密的安全令牌。

2- 您没有提及您的项目是 MVC 还是 Angular。我假设你有 Angular 版本。您需要持有者令牌才能发出经过身份验证的请求。首先,您必须对用户进行身份验证并获取令牌。然后将此不记名令牌添加到每个请求中。

您必须研究在 asp.net 核心中使用不记名令牌...

In the case of executing an API directly, how do I run it under a specific permission?

您可以 override current session values 并在 using 块中调用您的方法。

I have put my code inside a using block, but all APIs were fired successfully

将您的 API 方法声明为 public virtual,因为 AbpAuthorize.

有一些限制