我继承自System.Web.Http.AuthorizeAttribute以创建自定义授权/身份验证例程,以满足使用ASP.NET MVC 4开发的Web应用程序的一些不寻常的要求.这增加了用于来自Web的Ajax调用的Web API的安全性客户.要求是:
Web客户端是单页面应用程序(SPA),因此典型的表单身份验证不能很好地工作,但我尝试尽可能多地重用ASP.NET安全框架以满足要求.定制的AuthorizeAttribute非常适合于确定与Web服务方法关联的角色的要求2.我接受三个参数,应用程序名称,资源名称和操作来确定哪些角色与方法相关联.
public class DoThisController : ApiController
{
[Authorize(Application = "MyApp", Resource = "DoThis", Operation = "read")]
public string GetData()
{
return "We did this.";
}
}
Run Code Online (Sandbox Code Playgroud)
我重写OnAuthorization方法以获取角色并验证用户身份.由于必须针对每个事务对用户进行认证,因此通过在同一步骤中执行认证和授权来减少来回聊天.我通过使用基本身份验证从Web客户端获取用户凭据,该身份验证传递HTTP标头中的加密凭据.所以我的OnAuthorization方法如下所示:
public override void OnAuthorization(HttpActionContext actionContext)
{
string username;
string password;
if (GetUserNameAndPassword(actionContext, out username, out password))
{
if (Membership.ValidateUser(username, password))
{
FormsAuthentication.SetAuthCookie(username, false);
base.Roles = GetResourceOperationRoles();
}
else
{
FormsAuthentication.SignOut();
base.Roles = "";
}
}
else
{ …Run Code Online (Sandbox Code Playgroud)