如何为Web API设置身份验证?

时间:2015-09-16 14:44:44

标签: c# asp.net asp.net-web-api

我有一个我编写的asp.net应用程序,它有很多Web API控制器。

目前,当用户登录我的应用程序时,它使用Sessions,并且用我自己的SQL表验证用户帐户,该表存储用户名和密码(Hashed)等...

如果用户知道或查看js source /或fiddler,他们可以看到Web API调用并获取他们可能在应用程序外部调用的该Controller的URL。

我想以某种方式保护它,以便它不允许它们在应用程序之外访问它,或者甚至更好地检查用户是否允许执行请求。

这样做的最佳方式是什么?

由于

2 个答案:

答案 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应该处理身份验证和授权,除非您自己动手执行安全性。