1

我正在关注这篇文章来验证我正在编写的 Web API 服务的用户:

http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/

这工作得很好。

总之,我们使用自定义操作过滤器(适用于所有请求),检查加密的请求标头以确定用户是谁。

但是,我的控制器操作方法中也有需要知道当前用户是谁的代码。与其重复在 ActionFilter 中执行的逻辑,有没有办法可以在操作过滤器中设置一个变量并在控制器操作方法中引用它?

我还看到它建议应该使用 MessageHandler 而不是 actionFilter。这会在某种程度上有所帮助吗?

本质上,我需要以某种方式在过滤器代码中标记当前用户是谁,并能够在我的控制器中引用它

还是我离这儿很远?有更聪明的方法吗?谢谢

4

3 回答 3

4

创建一个 Principal 并将其存储在 Thread.CurrentPrincipal 中。

然后,您可以使用 User.Identity 在 Web Api 控制器中访问它

这种方法适用于我的机器

于 2012-08-14T19:06:21.970 回答
3

HttpRequestMessage对象有一个 Properties 集合,您可以在其中添加可以在控制器操作中访问的任意状态。

如果您使用 aHttpMessageHandler而不是.,您将使用相同的方法ActionFilter

于 2012-08-14T17:16:06.723 回答
2

不幸的是,没有内置机制来支持这种安全性。

在我们的项目中,我们在集合中使用了一个自定义令牌Request.Headers,我们在所有 Web Api 调用中往返。我们创建了一个ActionFilter对所有非 GET 请求进行操作的自定义。我们从 中提取令牌Request.Headers并将其与我们的令牌进行比较IClaimsIdentity,可以通过Thread.CurrentPrincipal.Identity

于 2012-08-14T17:48:04.547 回答