【问题标题】:MVC 5 Windows Authentication in AuthorizeAttribute and Service layerAuthorizeAttribute 和服务层中的 MVC 5 Windows 身份验证
【发布时间】:2017-06-05 17:50:59
【问题描述】:

我有一个 3 层 MVC 解决方案:MVC Web - 业务层 - 数据访问层

我在数据库后端有用户和组的自定义表,用户组映射到自定义权限结构。身份验证需要检查用户是否存在,而授权需要根据用户的权限来验证用户可以执行的操作。

我可以通过实现自定义 AuthorizeAttribute 并询问服务级别是否 HttpContext.User.Identity.Name 存在于用户表中来执行身份验证和授权,还可以根据控制器和操作验证用户权限。

但是,服务级别在从控制器中的操作调用时需要再次授权用户。这允许更好地控制用户可以做什么和不能做什么 - 例如,根据用户组成员身份,有些字段是只读的或隐藏的。

问题是我最终将在控制器操作的 AuthorizeAttribute 中以及从控制器操作本身(通过服务级别)中对用户进行身份验证和授权。

这是一个设计问题,但想看看我是否以最好的方式解决问题!

【问题讨论】:

    标签: model-view-controller windows-authentication service-layer


    【解决方案1】:

    如果我正确理解您的问题,您需要检查服务层上的用户权限/角色并在此基础上执行一些逻辑。答案实际上取决于您使用的服务层类型是什么?它是基于 Web API 还是基于接口的服务合同。如果您使用的是 web api,则可以在调用 web api 控制器操作之前在 Authorization 标头中注入令牌,这是使用 MVC 和 Web Api 的 SPA 的常见架构。在这种情况下,Web api 和 MVC 不需要托管在同一台服务器上,因为您使用的是 Bearer 令牌方法。如果您使用的是基于 cookie 的身份验证,那就另当别论了。

    【讨论】:

    • 感谢您的回答@himanshu。目前,服务层是一个紧密耦合的 dll(即没有接口的直接项目引用)。身份验证是 Windows 身份验证,用户名作为方法参数传递给服务层。将来我会想抽象这个服务层。我的问题是我将像在 AuthorizeAttirbute 中那样复制授权,然后在服务层中再次这样做。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2016-06-10
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2017-12-08
    相关资源
    最近更新 更多