如何在特定用户权限下调用web API?
How to call web API under specific user permission?
我有一个功能允许最终用户执行 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,如何在特定权限下运行呢?
更新 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
.
有一些限制
我有一个功能允许最终用户执行 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,如何在特定权限下运行呢?
更新 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
.