Как добавить пользовательский атрибут аутентификации в веб-API с помощью OWIN Security? - PullRequest
0 голосов
/ 13 июня 2019

Обычно я требую аутентификацию для контроллера, как это:

Namespace Controllers
    <Authorize(Users:="user1")>
    Public Class Module1Controller
        Inherits ApiController

        ' GET: api/Module1
        Public Function GetValues() As IEnumerable(Of String)

            Return New String() {"This", "is", "Module1", System.Web.HttpContext.Current.User.Identity.Name}
        End Function

Но вместо этого мы хотим пройти аутентификацию, используя тот же метод, за исключением того, что список пользователей извлекается из таблицы локальной базы данных (в SSMS) вместе с контроллерами, к которым они имеют доступ, и проверяет их, чтобы убедиться, что они иметь доступ к определенному контроллеру (Module1 в этом примере). Итак, я выполнил несколько примеров по созданию пользовательского атрибута аутентификации, но не могу заставить его работать. Идея состоит в том, чтобы реализовать этот класс:

Public Class CustomAuthorize
    Inherits AuthorizeAttribute
    Protected Function AuthorizeCore(ByVal httpContext As HttpContextBase) As Boolean
        Dim users As String() = {"user1", "user2"}
        If users.Contains(httpContext.User.Identity.Name) Then Return True
        Return False
    End Function
End Class

, где массив строк в действительности будет заполнен из запроса к базе данных, а затем будет использоваться <CustomAuthorize> в верхней части контроллера вместо <Authorize(Users:="user1"> ... Но когда я его запускаю, он никогда не превращается в CustomAuthorize класс. Любая помощь приветствуется.

1 Ответ

0 голосов
/ 13 июня 2019

Вот что получилось:

Public Class CustomAuthorize
    Inherits System.Web.Http.AuthorizeAttribute
    Protected Overrides Function IsAuthorized(ByVal actionContext As System.Web.Http.Controllers.HttpActionContext) As Boolean
        Dim users As String() = {"user1", "user2"}
        If users.Contains(httpContext.User.Identity.Name) Then Return True
        Return False
    End Function
End Class
...