2016-02-18 3 views
0

Я новичок в авторизации и безопасности приложений. Я основываюсь на своих приложениях angularjs и web api, которые используют Owin и AspNet.Identity.EntityFramework. Мне удалось заставить авторизацию работать, чтобы заставить пользователя зарегистрироваться или войти в приложение. Теперь я смотрю, как добавить более конкретный доступ, такой как роль администратора или конкретного пользователя, для просмотра более чувствительных данных. Я начал с атрибута [Authorize]. Это заставило безопасность. Затем я добавил [Authorize(User="tbryant")], который не разрешил другим пользователям и даже пользователю tbryant войти. В таблице AspNetUsers tbryant есть имя пользователя.Авторизироваться Атрибут Пользователь/Роли

Вот мои данные примеры из моего контроллера апи:

[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; 
    } 
} 

ответ

0

Убедитесь, что «user.Identity.Name» в HttpContext равно «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; 
} 
Смежные вопросы