我有一个我编写的asp.net应用程序,它有很多Web API控制器。
目前,当用户登录我的应用程序时,它使用Sessions,并且用我自己的SQL表验证用户帐户,该表存储用户名和密码(Hashed)等...
如果用户知道或查看js source /或fiddler,他们可以看到Web API调用并获取他们可能在应用程序外部调用的该Controller的URL。
我想以某种方式保护它,以便它不允许它们在应用程序之外访问它,或者甚至更好地检查用户是否允许执行请求。
这样做的最佳方式是什么?
由于
答案 0 :(得分:2)
您可以使用AuthorizeAttribute
来实现您的目标。
来自 MSDN
指定对控制器或操作方法的访问仅限于符合授权要求的用户。
以下示例显示了一个简化的帐户控制器,它限制或允许访问操作方法。 AuthorizeAttribute
属性应用于控制器,因此必须授权用户访问任何操作方法;但是,AllowAnonymousAttribute
属性应用于Register方法以覆盖用户授权的要求。 Manage和LogOff方法仅限授权用户使用。
[Authorize]
public class AccountController : Controller
{
public AccountController () { . . . }
[AllowAnonymous]
public ActionResult Register() { . . . }
public ActionResult Manage() { . . . }
public ActionResult LogOff() { . . . }
. . .
}
答案 1 :(得分:1)
我想以某种方式保护它,所以它不允许它们 在应用程序之外访问它。
根据我对该问题的理解,您不希望其他应用程序访问您的API,除了您的。
默认情况下,如果客户端应用程序和Web API位于同一个域中,除非您明确启用CORS,否则它已受到保护。
更好地检查用户是否可以执行请求
AuthorizeAttribute应该处理身份验证和授权,除非您自己动手执行安全性。