因此,我有一个现有的Windows Phone 7应用程序,它使用我自己的授权(播放器使用别名和密码登录,并通过数据库验证它)转到MVC Web服务。ASP.NET Web API和授权
现在我正在转向ASP.NET Web API,并且对于如何为它添加安全性我有点困惑?
我看到有AuthorizeAttribute
,但我需要做些什么来允许它们被授权?
任何指导在这里将不胜感激。
因此,我有一个现有的Windows Phone 7应用程序,它使用我自己的授权(播放器使用别名和密码登录,并通过数据库验证它)转到MVC Web服务。ASP.NET Web API和授权
现在我正在转向ASP.NET Web API,并且对于如何为它添加安全性我有点困惑?
我看到有AuthorizeAttribute
,但我需要做些什么来允许它们被授权?
任何指导在这里将不胜感激。
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上有一个很好的介绍,我建议你检查一下。
感谢,我给一个试试吧! – SniperED 2012-08-06 07:09:04