代码之家  ›  专栏  ›  技术社区  ›  Hoang Tran

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

  •  0
  • Hoang Tran  · 技术社区  · 7 年前

    我有一个功能,允许最终用户执行 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;
    

    如何添加的凭据 在用户未登录到应用程序时请求(因为它将作为计划作业自动运行)?

    我决定 use reflection to call an API by string name .

    在直接执行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 回复  |  直到 7 年前
        1
  •  1
  •   aaron    7 年前

    在直接执行API的情况下,如何在特定权限下运行它?

    你可以 override current session values 并在 using

    我已将代码放入 使用

    将API方法声明为 public virtual 因为有一些限制 AbpAuthorize .

        2
  •  1
  •   Alper Ebicoglu    7 年前

    你有两个选择。

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

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