ASP.NET Web API和授权

时间:2012-08-05 21:21:58

标签: asp.net-web-api

所以我有一个现有的Windows Phone 7应用程序,它使用我自己的授权(播放器使用别名和密码登录,并根据数据库验证它)转到MVC Web服务。

现在我正在寻求转向ASP.NET Web API,我对如何为其添加安全性感到困惑?

我看到有AuthorizeAttribute,但我需要做些什么才能让他们获得授权?

这里的任何指导都将不胜感激。

2 个答案:

答案 0 :(得分:5)

AuthorizeAttribute仅检查Thread.CurrentPrincipal以查看用户是否有权访问指定的资源(在这种情况下是控制器操作)。它不提供任何类型的身份验证机制。

在您的情况下,由于您拥有用户名和密码,您可以进行基本身份验证。最好的地方是在Message Handler中。以下是一个示例:BasicAuthenticationHandler

我不鼓励你使用它,因为这个实现背后没有测试,但这应该给你一个想法。该类是一个抽象类,当您将其设置为消息处理程序的基类时,需要覆盖AuthenticateUser方法并返回IPrincipal。如果返回值为null,则表示用户未经过身份验证。如果您提供IPrincipal,则会设置IPrincipalAuthorizeAttribute可以对其进行检查。

例如,您可以使用GenericPrincipal类来创建IPrincipal。假设您在ASP.NET主机上,您可以注册您的身份验证处理程序,如下所示:

GlobalConfiguration.Configuration.MessageHandlers.Add(new MyAuthHandler());

总而言之,无论您使用何种类型的身份验证(Basic Auth,OAuth等),都要以某种方式通过消息处理程序进行身份验证。然后,通过AuthorizeAttribute进行授权。

  

此外,Dominick Baier在Securing ASP.NET Web APIs上有一个很好的演示文稿,我建议你检查一下。

答案 1 :(得分:0)

也许这会对你有所帮助:Custom AuthorizeAttribute for Web API controllers