如何使用单独的Core API保护ASP.NET Core MVC客户端?

时间:2019-03-25 19:24:04

标签: asp.net asp.net-mvc asp.net-web-api asp.net-core asp.net-core-mvc

当前,我有两个客户端使用同一API,一个Xamarin Forms应用程序和一个ASP.NET Core MVC项目。不必在MVC项目中使用Entity并必须重写API中已经编写的大部分内容,我们决定对两者使用相同的API(在过程中隔离数据库)。

但是,我一直难以尝试使Identity适应这种情况。基本上,我们需要在此MVC客户端中请求登录信息,然后使用单独的API来访问服务器并验证此信息。

解决这个问题的方法似乎有几种,尽管由于涉及该特定场景的文档不足,我仍无法决定一项/一项工作。

理想情况下,我们希望能够在此客户端MVC项目中使用Identity的[Authorize]和其他有用的标签,但尚未找到在此过程中引入我们自己的API的方法。有什么想法吗?

1 个答案:

答案 0 :(得分:7)

身份本质上是一个用户管理框架。身份验证/授权功能仅与切向相关。当您开始谈论需要授权许多不同的应用程序,尤其是不同类型的应用程序(例如移动应用程序和网站)时,那么您需要开始寻找集中式身份提供商。如果您想自己动手制作游戏,IdentityServer就是镇上唯一的游戏。对于托管解决方案,您可以考虑使用Auth0或Azure Active Directory之类的东西。

无论您选择哪种方式,都需要针对不同情况使用各种流程。移动应用通常会使用OAuth流进行以用户为中心的操作,而通用的非用户特定请求可能会使用客户端凭据。对于网站,您将使用Cookie身份验证和OIDC流。如果您需要通过AJAX之类的功能来支持客户端身份验证的请求,则您的API将利用客户端凭据或混合身份验证流。

简而言之,这里无可替代地进行研究。您需要深入研究,弄清楚需要支持什么以及如何支持它。但是,无论流量如何,都需要一个集中的身份提供程序来实现。

也就是说,ASP.NET Core中的身份验证和授权中间件不与任何特定提供程序绑定。根据最终的用途,您可能会或可能不会继续使用ASP.NET Identity(IdentityServer可以与之集成,但诸如Auth0之类的东西将拥有它自己的用户管理)。但是,这与您继续使用Authorize属性之类的功能完全无关。