【问题标题】:Authorize Attribute User / Roles授权属性用户/角色
【发布时间】:2016-02-18 04:16:39
【问题描述】:

我是新来的应用程序授权和安全性。我正在使用 Owin 和 AspNet.Identity.EntityFramework 构建我的 angularjs 和 web api 应用程序。我已经能够获得授权来强制用户注册/登录到应用程序。现在我正在研究如何添加更具体的访问权限,例如管理员角色或特定用户来查看更敏感的数据。我从[Authorize] 属性开始。这迫使安全。然后我添加了[Authorize(User="tbryant")],它不允许其他用户甚至用户tbryant登录。在tbryant的AspNetUsers表中有一个用户名。

这是来自我的 api 控制器的示例数据:

    [RoutePrefix("api/Orders")]
public class OrdersController : ApiController
{
    [Authorize(Users="tbryant")]
    [Route("")]        
    public IHttpActionResult Get()
    {
        return Ok(Order.CreateOrders());
    }
}


public class Order
{
    public int OrderID { get; set; }
    public string CustomerName { get; set; }
    public string ShipperCity { get; set; }
    public Boolean IsShipped { get; set; }

    public static List<Order> CreateOrders()
    {
        List<Order> OrderList = new List<Order> 
        {
            new Order {OrderID = 10248, CustomerName = "Tee Joudeh", ShipperCity = "Cleveland", IsShipped = true },
            new Order {OrderID = 10249, CustomerName = "Ahmad Hasan", ShipperCity = "Columbus", IsShipped = false},
            new Order {OrderID = 10250,CustomerName = "Thomas Yaser", ShipperCity = "Detroit", IsShipped = false },
            new Order {OrderID = 10251,CustomerName = "Lena Jones", ShipperCity = "Ann Arbor", IsShipped = false},
            new Order {OrderID = 10252,CustomerName = "Yasmeen Rami", ShipperCity = "Bamberg", IsShipped = true}
        };

        return OrderList;
    }
}

【问题讨论】:

    标签: asp.net angularjs asp.net-mvc asp.net-web-api owin


    【解决方案1】:

    确保 HttpContext 中的“user.Identity.Name”等于“tbryant”。

    这是 Authorize 属性的工作原理。

    protected virtual bool AuthorizeCore(HttpContextBase httpContext)
    {
    if (httpContext == null)
    {
        throw new ArgumentNullException("httpContext");
    }
    
    IPrincipal user = httpContext.User;
    if (!user.Identity.IsAuthenticated)
    {
        return false;
    }
    
    if (_usersSplit.Length > 0 && !_usersSplit.Contains(user.Identity.Name, StringComparer.OrdinalIgnoreCase))
    {
        return false;
    }
    
    if (_rolesSplit.Length > 0 && !_rolesSplit.Any(user.IsInRole))
    {
        return false;
    }
    
    return true;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-08
      • 2011-10-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2013-12-03
      • 2011-09-29
      • 1970-01-01
      相关资源
      最近更新 更多