所以我有一个现有的 Windows Phone 7 应用程序,它使用我自己的授权(玩家使用别名和密码登录并根据数据库验证它)转到 MVC 网络服务。
现在我想转移到 ASP.NET Web API,我对如何为其添加安全性感到有点困惑?
我看到有 AuthorizeAttribute
,但我需要做什么才能让它们获得授权?
如有任何指导,我们将不胜感激。
最佳答案
AuthorizeAttribute
仅检查 Thread.CurrentPrincipal
以查看用户是否授权访问指定资源(在本例中为 Controller 操作)。它不提供任何类型的身份验证机制。
在您的情况下,由于您有用户名和密码,您可以进行基本身份验证。执行此操作的最佳位置是在消息处理程序中。这是一个例子:BasicAuthenticationHandler
我不鼓励你按原样使用它,因为这个实现背后没有测试,但这应该会给你一个想法。该类是一个抽象类,当您将其设置为消息处理程序的基类时,您需要覆盖 AuthenticateUser
方法并返回 IPrincipal
。如果返回值为 null,则表示用户未通过身份验证。如果您提供 IPrincipal
,则该 IPrincipal
将被设置并且您的 AuthorizeAttribute
可以检查它。
例如,您可以使用 GenericPrincipal类来创建一个 IPrincipal
。假设您在 ASP.NET 主机上,您可以按如下方式注册您的身份验证处理程序:
GlobalConfiguration.Configuration.MessageHandlers.Add(new MyAuthHandler());
总而言之,无论您使用何种类型的身份验证(基本身份验证、OAuth 等),以某种方式通过消息处理程序进行身份验证。然后通过AuthorizeAttribute
进行授权。
Also, Dominick Baier has a nice presentation on Securing ASP.NET Web APIs and I recommend you to check that out.
关于asp.net-web-api - ASP.NET Web API 和授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11820179/