【问题标题】:Understanding Microsoft Identity Namespaces (System.Web.Security, Microsoft.AspNet.Identity.Core, vs Microsoft.AspNetCore.Identity)了解 Microsoft 标识命名空间(System.Web.Security、Microsoft.AspNet.Identity.Core 与 Microsoft.AspNetCore.Identity)
【发布时间】:2020-02-15 11:24:55
【问题描述】:

我希望有人有类似的问题,可以提供建议。我研究了很长时间,但找不到明确的答案。

我的设置:

  • 1 MsSQL 数据库(包含 System.Web.Security 的身份表)
  • .Net Framework 中的许多 DLL(使用 System.Web.Security 登录)
  • 多个不同的程序/应用程序调用 DLLs
  • .Net Framework 中的 WebForms GUI(使用 System.Web.Security 登录)

我想要什么:

  • 在 .net Core 或 .Net Framework 中使用 IdentityServer4
  • 在 .Net Framework 中保留 DLL
  • 在 .Net Core 中使用 WebApi
  • 使用新的 GUI(例如在 Angular 或 Blazor 中)
  • 在 WebForms 中将旧 GUI 与新 GUI 并行使用(直到新 GUI 完成)

我的问题: 我的 DLL 和应用程序使用 System.Web.Security 进行用户管理(登录等)。 .Net Core 不支持此命名空间,但将我所有的 DLL 更改为 .Net Core 对我来说是不可行的,因为这会导致太多更改。我想将它们保留在 .NetFramework 中。

我的主要问题之一:

  • .Net Core 中的应用程序(例如 WebApi、IdentityServer4)和 .NetFramework 中的应用程序/Dll 能否使用相同的身份数据库(登录、成员资格等)。换句话说,如果在不同的应用程序/Dlls 中使用,“microsoft.aspnet.identity”和“microsoft.aspnetcore.identity”兼容(关于数据库)。
  • 或者我是否必须在所有应用程序/dll 中使用身份命名空间之一才能兼容? (因此必须在所有应用/dll 中使用相同的框架)

我希望这足够简短和清楚地描述我的问题。如果有不清楚的地方请告诉我。

更新 我刚刚发现这篇帖子Microsoft.AspNet.Identity and Microsoft.AspNet.Identity.EntityFramework in .NET Standard 2.0 也许在所有 DLL 中使用 .Net 标准可能是一种选择。我会试试这个,看看它对我有用。但我仍然不明白“microsoft.aspnet.identity”和“microsoft.aspnetcore.identity”是否以及如何在 .Net 标准库中工作。

结果:我能够使用“Microsoft.AspNetCore.Identity”, .Net Standard 2.1 库中的“Microsoft.EntityFrameworkCore”(.Net Standard 2.1 和 net Core 3.0 支持 Microsoft.EntityFrameworkCore)。所以这是个好消息(我不必为了身份而将所有 DLL 迁移到 .Net Core。迁移到 .Net 标准就足够了)。 但是我不能在 .Net Framework DLL/App 中引用那个 .Net Standard 2.1 DLL,因为 .Net Framework 支持它到 .Net Standard 2.0...所以这并不能完全解决问题,但这似乎是最接近我想做的事情。

更新2

我准备为此更改大量代码。前任旧 WebApp 中的身份验证,以便它与 IdentityServer 对话并删除所有项目中与 System.Web(.Security) 相关的所有内容。 仍然让我感到困惑的一件事是“microsoft.aspnet.identity”与“microsoft.aspnetcore.identity”。我是否必须为所有项目选择其中一个,或者我可以混合这些命名空间(取决于项目的框架)但只保留一个数据库。

更新3 我标记了一个答案,因为它有助于回答我的基本问题(“它不可能”)。我将尝试实施它,并看到它在那里出现更多问题。 但如果有人对此主题有更多想法/经验,请随时在此处分享。

我使用的一些来源:

【问题讨论】:

  • 一些关于差异的信息:stackoverflow.com/questions/41140952/…
  • 感谢您的回复,我已经看到了,但它只是解释了在 .Net Core 和 .Net Framework 中必须使用什么命名空间,而不是如果具有这两个命名空间的两个应用程序兼容。

标签: asp.net-core .net-core asp.net-identity identityserver4 identity


【解决方案1】:

尽管名称中都包含 ASP.NET,但 ASP.NET Core 是一个与 ASP.NET 完全不同的框架。人们似乎没有意识到,这不仅仅是一个版本的跳跃:你必须重写你的应用程序。

ASP.NET 成员资格 (System.Web.Security) 在 .NET Core 中已弃用且 100% 不受支持。这不会改变,这里没有解决方法。如果您想在 ASP.NET Core 中进行身份验证,则必须从头开始。

由于您想使用 Identity Server,无论如何,您仍然可以支持旧版 Web 窗体应用程序,但您必须将所有身份验证移至 Identity Server,然后使用 Identity Server 作为 Web 窗体应用程序中的身份验证机制.同样,这将要求对 Web 表单应用程序进行更改。这里没有其他选择。

在 Identity Server 方面,您可以选择放弃 ASP.NET Identity。 Identity Server 只是身份验证提供者;它不关心用户管理。从技术上讲,您可以继续使用旧的用户表,但您必须为 Identity Server 创建自定义配置文件和用户存储提供程序,以使其能够完成所需的工作。老实说,您最好从这里重新开始 Identity,而不是做大量工作来尝试支持很久以前已弃用的用户管理系统。

有长有短,这里没有什么是微不足道的。如果你想做你所说的,你正在着手一个主要项目,这将需要大量的努力并改变你的应用程序的每一个部分。就是那样子。如果你还没有为此做好准备,那就坚持你所拥有的。

【讨论】:

  • 嗨,@Chris Pratt,我准备为此更改大量代码。前任旧 WebApp 中的身份验证,以便它与 IdentityServer 对话并删除所有项目中与 System.Web(.Security) 相关的所有内容。仍然让我感到困惑的一件事是“microsoft.aspnet.identity”与“microsoft.aspnetcore.identity”。我是否必须为所有项目选择其中一个,或者我可以混合这些命名空间(取决于项目的框架)但只保留一个数据库。
  • 区别在于命名空间,aspnet v. aspnetcore。同样,完全不同的框架,因此每个版本的身份完全不同。对于新的东西,特别是如果你打算在 Identity Server 中使用 Identity 集成,你需要 .NET Core 版本。
  • 好的,现在我明白了。所以基本上我需要在所有项目中使用“Microsoft.AspNetCore.Identity”和“Microsoft.EntityFrameworkCore”,这意味着我不能再使用.Net Framework(也许是我发布的.Net Standard - 我需要试试这个). 我会尝试花更多时间来理解为什么这是不可能的。因为我认为最终用户和组只是存储在数据库中,我“只是”需要“以某种方式”访问它们和一个完整的框架改变“只是”一件事有点过头了。
  • 值得一提的是,.NET Core 3.0 不兼容任何版本的 .NET Framework。如果您需要在 .NET Framework 中保留一些内容,则需要坚持使用 2.2。
猜你喜欢
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 2012-11-12
  • 1970-01-01
  • 2016-05-24
  • 1970-01-01
  • 2023-04-02
  • 1970-01-01
相关资源
最近更新 更多