我正在关注本文,以验证我正在撰写的Web API服务的用户:
http://codebetter.com/johnvpetersen/2012/04/02/making-your-asp-net-web-apis-secure/
这很好用。
总之,我们使用自定义操作过滤器(应用于所有请求),检查加密的请求标头以确定用户是谁。
但是,我的控制器操作方法中也有代码需要知道当前用户是谁。有没有一种方法可以在动作过滤器中设置变量并引用控制器动作方法中的变量,而不是重复在ActionFilter中执行的逻辑?
我也看到它建议使用MessageHandler而不是actionFilter。这会有所帮助吗?
基本上我需要以某种方式标记当前用户在过滤器代码中的身份并且能够在我的控制器中引用它
还是我离开这里?是一个更聪明的方式? 感谢
答案 0 :(得分:4)
创建一个Principal并将其存储在Thread.CurrentPrincipal中。
然后,您可以使用User.Identity
在Web Api控制器中访问它答案 1 :(得分:3)
HttpRequestMessage
对象有一个Properties集合,您可以在其中添加可在控制器操作中访问的任意状态。
如果您使用HttpMessageHandler
而不是ActionFilter
,则会使用相同的方法。
答案 2 :(得分:2)
不幸的是,没有内置机制来支持这种安全性。
在我们的项目中,我们在Request.Headers
集合中使用自定义令牌,我们在所有Web Api调用中往返。我们创建了一个自定义ActionFilter
,可以对所有非GET请求进行操作。我们从Request.Headers
中提取令牌,并将其与IClaimsIdentity
中的令牌进行比较,该令牌可通过Thread.CurrentPrincipal.Identity