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

7

目前,我有两个客户端使用同一个API,一个是Xamarin Forms应用程序,另一个是ASP.NET Core MVC项目。为了避免在MVC项目中使用Entity并且需要重写已经编写在API中的大部分内容,我们决定同时为这两个客户端使用同一个API(在此过程中隔离数据库)。

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

似乎有几种不同的方法可以解决这个问题,但由于没有涵盖这种特定场景的文档,因此我还没有能够确定一种方法/使其正常工作。

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


请澄清:“......并验证此信息”是指验证API调用(请求)还是其他? - DaniDev
@DaniDev 通过API在数据库中验证用户的姓名(电子邮件)和密码,并将结果返回给客户端。 - Gabriel Ferreira
通常,从客户端应用程序进行API调用时,您会根据您的应用程序凭据(令牌)授权该调用。请参考@chris Pratt的答案,找出最适合您的方法。 如果您需要请求特定用户信息,可以将该信息作为API请求的一部分传递,前提是您拥有该系统的唯一标识信息。这只是一个简要说明复杂而常见的问题。它不是解决问题的方法,而是帮助您以正确的方式思考问题,以便找出最适合您的方法。 - DaniDev
1个回答

10
身份验证是一个用户管理框架,其核心功能与身份验证和授权只有间接关系。当您开始讨论需要授权许多不同的应用程序时,特别是不同类型的应用程序,如移动应用程序和网站,那么您需要开始寻找集中式身份提供者。如果您想自己开发,则IdentityServer几乎是唯一的选择。对于托管解决方案,您可以考虑类似于Auth0或Azure Active Directory之类的东西。
无论您选择哪种解决方案,都需要针对不同情况使用各种流程。移动应用程序通常会使用OAuth流程进行用户为中心的操作,而通用的非用户特定请求可能会使用客户端凭据。对于网站,您将使用cookie身份验证和OIDC流程。您的API将利用客户端凭据或混合认证流程,如果您需要支持通过诸如AJAX之类的方式进行客户端验证的请求。
简而言之,在这里没有替代品。您需要深入挖掘,弄清楚您需要支持什么以及如何支持它。但是,无论使用什么单独的流程,您都需要一个集中式身份提供者来完成所有操作。
话虽如此,ASP.NET Core中的身份验证和授权中间件并没有与任何特定提供商绑定。根据您最终选择的内容,您可能会继续使用ASP.NET Identity(IdentityServer可以与之集成,但是像Auth0这样的东西将具有自己的用户管理)。然而,这完全不影响您继续使用诸如Authorize属性之类的东西。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接