所以我有一个现有的 Windows Phone 7 应用程序,它使用我自己的授权(玩家使用别名和密码登录,并根据数据库验证它)去 MVC Web 服务。
现在我希望转向 ASP.NET Web API,但我有点困惑如何为其添加安全性?
我看到有AuthorizeAttribute
,但我需要做什么才能让他们获得授权?
这里的任何指导将不胜感激。
所以我有一个现有的 Windows Phone 7 应用程序,它使用我自己的授权(玩家使用别名和密码登录,并根据数据库验证它)去 MVC Web 服务。
现在我希望转向 ASP.NET Web API,但我有点困惑如何为其添加安全性?
我看到有AuthorizeAttribute
,但我需要做什么才能让他们获得授权?
这里的任何指导将不胜感激。
AuthorizeAttribute
只是检查Thread.CurrentPrincipal
用户是否有权访问指定的资源(在这种情况下是控制器操作)。它不提供任何类型的身份验证机制。
在您的情况下,由于您有用户名和密码,您可以进行基本身份验证。执行此操作的最佳位置是在消息处理程序中。这是一个示例:BasicAuthenticationHandler
我不鼓励您按原样使用它,因为此实现背后没有测试,但这应该给您一个想法。该类是一个抽象类,当您将其设置为消息处理程序的基类时,您需要覆盖该AuthenticateUser
方法并返回IPrincipal
。如果返回值为 null,则表示用户未通过身份验证。如果您提供一个IPrincipal
,IPrincipal
它将被设置并且您AuthorizeAttribute
可以检查它。
例如,您可以使用GenericPrincipal类创建一个IPrincipal
. 假设您在 ASP.NET 主机上,您可以注册您的身份验证处理程序,如下所示:
GlobalConfiguration.Configuration.MessageHandlers.Add(new MyAuthHandler());
总而言之,无论您使用什么类型的身份验证(基本身份验证、OAuth 等),都以某种方式通过消息处理程序进行身份验证。然后,通过 进行授权AuthorizeAttribute
。
此外,Dominick Baier 有一个关于保护 ASP.NET Web API的精彩演示,我建议您检查一下。
maybe this will help you: Custom AuthorizeAttribute for Web API controllers