ASP.NET Web API和授权

Sni*_*rED 3 asp.net-web-api

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

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

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

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

tug*_*erk 5

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

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

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

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

GlobalConfiguration.Configuration.MessageHandlers.Add(new MyAuthHandler());
Run Code Online (Sandbox Code Playgroud)

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

此外,Dominick Baier有关于保护ASP.NET Web API的精彩演示,我建议您检查一下.