0

Я защитил свой API, используя Авторизовать атрибут.asp.net web api 2 авторизует API в зависимости от свойства конкретной недвижимости (из базы данных)

Если запрос не имеет действительного токена OAuth, он не обрабатывает и не возвращает авторизационной ошибки.

В моей таблице User Я добавил «Status» колонку, чтобы проверить, если пользователь активен (Soft удалить) или нет.

Я хочу использовать это значение «Статус» («Пользовательский объект») для аутентификации моих API.

Предположим, что статус false, я хочу, чтобы структура не обрабатывала запрос так же, как в случае «Авторизовать атрибут».

  • Возможно ли это? Если да, то как?

Примечание:

Теперь я проверяю значение «Статус» в моем действии и принять решение о проведении или нет.

Если у вас есть другие лучшие альтернативы, тогда они также приветствуются.

Спасибо.

ответ

0

Вы могли бы реализовать свой собственный AuthorizeAttribute

Вот пример, который я использовал, чтобы реализовать свой собственный метод Авторизовать на основе ролей:

public class AuthorizeRoles : AuthorizeAttribute 
    { 
     private readonly List<string> _rolesAllowed; 

     public AuthorizeRoles(string rolesAllowed) 
     { 
      this._rolesAllowed = rolesAllowed.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList(); 
     } 

     public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext) 
     {    
      var controller = actionContext.ControllerContext.Controller; 

       if (!this._rolesAllowed.Contains("*")) 
       { 
        string errorMessage = "Authorization denied. Missing required role"; 
        actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); 
       } 

      } 
      else 
      { 
       string errorMessage = "Authorization denied. Request is missing context header"; 
       actionContext.Response = new HttpResponseMessage(System.Net.HttpStatusCode.Unauthorized); 
      } 

      base.OnAuthorization(actionContext); 
     } 

вы затем использовать его в своих методах API, как это:

[AuthorizeRoles("some value")] or [AuthorizeRoles("*")] 

Вы можете эффективно указать, какие методы разрешают доступ к людям с определенным значением в их статусе.

У вас есть доступ к контроллеру, вы можете проверить все необходимые значения и разрешить или запретить доступ по результатам проверки.

Я удалил часть моего менее интересного кода, но то, что осталось, должно дать вам указание на продолжение работы.

0

Как бы я это сделал, я бы создал таблицу ролей с разными уровнями доступа. На моем контроллере я использовал бы функцию Roles атрибута Authorize, чтобы разрешить или заблокировать пользователей от доступа к Action.

[Authorize(Roles = "isActive")] 
Смежные вопросы