2012-08-05 124 views
3

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

现在我正在转向ASP.NET Web API,并且对于如何为它添加安全性我有点困惑?

我看到有AuthorizeAttribute,但我需要做些什么来允许它们被授权?

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

回答

5

AuthorizeAttribute仅针对Thread.CurrentPrincipal进行检查,以查看用户是否有权访问指定资源(在本例中为控制器操作)。它不提供任何类型的认证机制。

就你而言,由于你有用户名和密码,你可以进行基本认证。最好的地方是在消息处理程序中。这里是一个例子:BasicAuthenticationHandler

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

可以,例如,使用GenericPrincipal类来创建一个IPrincipal。假设你是ASP.NET主机上,可以如下注册认证处理程序:

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

概括起来,通过做一个消息处理程序的认证在某种程度上,不管你用什么类型的身份验证(基本身份验证,OAuth等)。然后,通过AuthorizeAttribute进行授权。

另外,Dominick Baier在Securing ASP.NET Web APIs上有一个很好的介绍,我建议你检查一下。

+0

感谢,我给一个试试吧! – SniperED 2012-08-06 07:09:04