MVC + WebApi。授权和认证

时间:2018-05-27 08:29:56

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

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

那么,如何在ASP.NET MVC项目中(在客户端)正确实现授权和身份验证?我仔细阅读了如何在Web Api中实现它(通过令牌),但我无法理解如何在ASP.NET MVC中正确使用此令牌。

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

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我建议您使用OWIN接口为web api和MVC实现基于令牌的身份验证。您应该在web api中提供身份验证令牌,并提供在MVC和Web Api中反序列化令牌的功能。因此,您可以找到一个示例开源项目here,我为此开发了一个关于如何使用OWIN为Web api实现基于令牌的身份验证的方法。

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

答案 2 :(得分:0)

首先,如果您尚未投入生产,可能是时候跳转到.Net Core 2.x.它没有将Web API和MVC分离到地下并且它是最新技术。

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

OIdC定义了两种类型的令牌:身份令牌,描述用户和授权令牌,提供对API的访问权限。系统中应该有一些 Identity Provider ,对用户进行身份验证并授权客户端(例如您的MVC APP)。此类提供商可以是外部的(Google,Office 365等),也可以是内部的 - 您可以使用免费Identity Server 4.x实施并根据您的需要进行调整。您甚至可以将IdP构建到您的应用程序中。

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

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