如何使用OWIN Security将自定义身份验证属性添加到Web API?

时间:2019-06-12 22:03:38

标签: vb.net api model-view-controller oauth owin

通常,我需要像这样的控制器进行身份验证:

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 :(得分:0)

这就是最终的结果:

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