【问题标题】:MVC + WebApi. Authorization and AuthenticationMVC + WebApi。授权和认证
【发布时间】:2018-11-06 02:27:29
【问题描述】:

我有一个 ASP.NET MVC 项目和一个 Web Api 项目(单独的项目)。完全通过Web Api实现对数据库的访问(包括授权和认证)。 ASP.NET MVC 是客户端,Web Api 是服务器。

那么,如何在 ASP.NET MVC 项目中(在客户端)正确实现授权和认证呢?我读了很多这是如何在 Web Api 中实现的(通过令牌),但我不明白如何在 ASP.NET MVC 中正确使用这个令牌。

实现每个请求的wrap?我也不知道如何在 ASP.NET MVC 中定义用户角色。也许有一些方法可以重写 ASP.NET MVC 授权的标准方法以使用 Web Api 令牌? ASP.NET MVC 客户端上的Authorize 属性会起作用吗?如果可能,请在这种实现的示例中提出建议,或者告诉我如何最好地实现它。

【问题讨论】:

标签: c# asp.net-mvc authentication asp.net-web-api


【解决方案1】:

首先,如果您还没有投入生产,可能是时候跳到 .Net Core 2.x 了。它没有将 Web API 和 MVC 分开,而且它是最新的技术。

如果由于某种原因,您无法升级框架,那么可以,使用 Microsoft.Owin、Microsoft.Owin.Security。 OpenIdConnect 和所有依赖项。

OIdC 定义了两种类型的令牌:身份令牌,描述用户和授权令牌,提供对 API 的访问权限。系统中应该有一些Identity Provider,对用户进行认证,对客户端进行授权(比如你的MVC APP)。这样的提供者可以是外部的(谷歌、Office 365 等),也可以是内部的——您可以使用免费的Identity Server 4.x 实现并根据您的需要对其进行调整。您甚至可以将 IdP 构建到您的应用中。

.Net Core 和 Owin OIdC 实现的流程应该相同:

  • 您注册了所有应用程序(身份提供程序中的 API 和 MVC)
  • 用户请求 MVC 资源,OIdC 中间件将他重定向到 IdP。
  • IdP 对颁发身份和访问令牌的用户进行身份验证。
  • MVC 验证身份令牌并使用它来创建本地身份验证 cookie,以便用户在应用程序中通过身份验证。
  • MVC 控制器调用一些 API 并放入请求访问令牌中,从 IdP 请求。
  • API 验证令牌并使用请求的数据进行响应。

【讨论】:

    【解决方案2】:

    我会推荐你​​使用OWIN 接口来为 web api 和 MVC 实现基于令牌的身份验证。您应该在您的 Web api 中提供身份验证令牌,并提供在 MVC 和 Web Api 中反序列化令牌的能力。因此,您可以找到一个示例开源项目 here,我开发了它,了解如何使用 OWIN 为 Web api 实现基于令牌的身份验证。

    对于 MVC 项目,您应该使用 OWIN 遵循相同的做法。

    【讨论】:

      【解决方案3】:

      如果 Active Directory 配置为使用您的应用程序,最好的方法是使用 Azure Active Directory 身份验证。您可以获取更多信息here

      【讨论】:

        猜你喜欢
        • 2019-02-15
        • 2015-03-04
        • 1970-01-01
        • 2018-07-25
        • 2010-11-14
        • 2021-11-08
        • 2013-08-08
        • 2017-09-11
        相关资源
        最近更新 更多