ASP.NET Web API中的授权:返回特定于授权用户的数据

时间:2012-09-27 22:15:29

标签: asp.net .net web-services rest

假设我使用自定义过滤器属性实现了基于令牌的授权,如here所述。

我们还假设,我有一个返回任务的控制器:

public IEnumerable<Task> Get()
{
    // return tasks for authorized user
}

现在,我将如何仅返回授权用户的任务?将用户ID作为查询参数传递不是一个选项 - 禁止请求其他用户的任务。

2 个答案:

答案 0 :(得分:1)

您可以从操作过滤器中丰富HttpRouteData,并在控制器操作中读取它。 actionContext.ControllerContext.RouteData.Values.Add(“UserId”,someVaue);

您还可以使用System.Runtime.Remoting.Messaging.CallContext类(GetData和SetData)

答案 1 :(得分:1)

在您链接的示例中的代码中,他们正在加密令牌中的用户名。在过滤器中,他们从http标头获取此标记,将其解密回用户名,并根据AuthorizedUserRepository查询它。

AuthorizedUserRepository.GetUsers().First(x => x.Name == RSAClass.Decrypt(token));

您当然可以使用userid而不是名称,并使用真正的存储库而不是此示例存储库。您可以在控制器操作或构造函数中重复执行所有操作,也可以沿路径数据或某些ThreadStatic属性传递它。如果您想获得真正的想象力,您可以实现基于声明的安全性并在当前线程的主体上设置声明。真的,你如何传递它并不重要。

最终,您只需在查询或linq语句的where子句中使用此值即可过滤到您希望允许用户访问的数据。