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

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

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

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

似乎有几种不同的方法可以解决这个问题,尽管我还无法决定一种方法/使一种方法有效,因为没有太多文档涵盖这一特定场景。

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

最佳答案

Identity 的核心是一个用户管理框架。认证/授权的功能只是无关紧要的。当您开始谈论需要授权许多不同的应用程序,特别是不同类型的应用程序(例如移动应用程序和网站)时,您需要开始寻找集中式身份提供商。如果您想推出自己的游戏,IdentityServer 几乎是镇上唯一的游戏。对于托管解决方案,您可以考虑 Auth0 或 Azure Active Directory 之类的解决方案。

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

简而言之,没有什么可以替代在这里进行研究。您需要深入挖掘,弄清楚您需要支持什么以及如何支持它。但是,无论单个流程如何,您都需要一个集中的身份提供商来完成这一切。

也就是说,ASP.NET Core 中的身份验证和授权中间件不依赖于任何特定的提供程序。根据您最终要使用的内容,您可能会也可能不会继续使用 ASP.NET Identity(IdentityServer 可以与之集成,但像 Auth0 这样的东西将有它自己的用户管理)。但是,这对您继续使用 Authorize 属性等内容的能力没有任何影响。

关于asp.net - 如何使用单独的 Core API 保护 ASP.NET Core MVC 客户端?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55345078/

相关文章:

javascript - ASP.NET MVC 中的拖放区错误消息

c# - Entity Framework : more than one entity have the same primary key value

c# - 如何从 ASP.NET Web Api 中的绑定(bind)中排除某些属性

ASP.NET MVC2 不在 HtmlAttributes 中用破折号替换下划线

asp.net - Twilio 回调在我的 .NET 服务中不起作用

c# - BeginRequest 被调用两次

authentication - DotnetOpenAuth RefreshAuthorization 被阻止 403 禁止 (12202)

asp.net - 值不能为空。参数名称 : items (DrodownList)

c# - 在 macOS 上使用 visual studio code mssql 扩展的 SQL 连接错误

c# - 在 asp.net mvc 中使用 jQuery 动态删除表行