asp.net-web-api - ASP.NET Web API 和授权

标签 asp.net-web-api

所以我有一个现有的 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/

相关文章:

c# - 从 MVC 4 调用 Web API 方法

wcf-web-api - TestClient 去哪儿了?

c# - ASP.NET WebAPI 2 : How to pass empty string as parameter in URI

asp.net - 访问Web API方法时404 Not Found

asp.net mvc 和 web api 哪个更好 Http POST 或 PUT

.net - 为 ASP.NET API 微服务实现 API 网关

asp.net - 在 ASP.NET Core API 中以字符串形式接收 JSON 对象

c# - 如何为 Web 窗体项目中长时间运行的 Ajax 请求禁用/释放早期 session 状态阻塞

angular - 如何将 Angular 4 Web 应用程序连接到移动摄像头?

asp.net-mvc - 在 ASP.NET 4.5 和 VS 2012 RC 中将字符串发布到 Web API Controller