相关疑难解决方法(0)

如何为异常需求自定义ASP.NET Web API AuthorizeAttribute

我继承自System.Web.Http.AuthorizeAttribute以创建自定义授权/身份验证例程,以满足使用ASP.NET MVC 4开发的Web应用程序的一些不寻常的要求.这增加了用于来自Web的Ajax调用的Web API的安全性客户.要求是:

  1. 用户必须在每次执行事务时登录,以验证其他人在登录并离开后没有走到工作站.
  2. 在程序时无法将角色分配给Web服务方法.必须在运行时分配它们,以便管理员可以对其进行配置.此信息存储在系统数据库中.

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)

asp.net security asp.net-mvc asp.net-web-api

35
推荐指数
3
解决办法
6万
查看次数

标签 统计

asp.net ×1

asp.net-mvc ×1

asp.net-web-api ×1

security ×1