Понимание пространств имен Microsoft Identity (System.Web.Security, Microsoft.AspNet.Identity.Core, против Microsoft.AspNetCore.Identity) - PullRequest
1 голос
/ 18 октября 2019

Я надеюсь, что у кого-то была похожая проблема, и он может дать совет. Я исследовал довольно долгое время, но не смог найти однозначного ответа.

Мои настройки:

  • 1 База данных MsSQL (содержит таблицы идентификаторов системы.Web.Security)
  • Многие библиотеки DLL в .Net Framework (с использованием System.Web.Security для входа в систему)
  • Несколько различных программ / приложений, вызывающих библиотеки DLL
  • WebFormsГрафический интерфейс в .Net Framework (Использование System.Web.Security для входа в систему)

Что я хочу:

  • Использование IdentityServer4 в .netCore или .Net Framework
  • Хранение DLL в .Net Framework
  • Использование WebApi в .Net Core
  • Использование нового графического интерфейса (например, в Angular или Blazor)
  • Использовать старый графический интерфейс в веб-формах параллельно с новым графическим интерфейсом (пока новый графический интерфейс не будет завершен)

Моя проблема: Мои библиотеки DLL и приложения используют System. Web.Security для управления пользователями (логин и т. Д.). Это пространство имен не поддерживается в .Net Core, но изменить все мои библиотеки DLL на .Net Core для меня невозможно, поскольку это приведет к слишком большому количеству изменений. Я хотел бы сохранить их в .NetFramework.

Один из моих главных вопросов:

  • Может ли приложение в .Net Core (например, WebApi, IdentityServer4) и App / Dlls in. NetFramework использует одну и ту же базу данных для идентификации (логин, членство и т. Д.). Другими словами, «microsoft.aspnet.identity» и «microsoft.aspnetcore.identity» совместимы (в отношении базы данных), если они используются в различных приложениях / библиотеках.
  • Или мне нужно использовать одно из Identity-Namespaces во всех приложениях / библиотеках для совместимости? (и, следовательно, ДОЛЖНЫ использовать одну и ту же платформу во всех приложениях / библиотеках)

Надеюсь, это было кратко и достаточно ясно, чтобы описать мою проблему. Пожалуйста, дайте мне знать, если что-то неясно.

Обновление Я только что нашел это сообщение Microsoft.AspNet.Identity и Microsoft.AspNet.Identity.EntityFramework в .NET Standard 2.0 Возможно, использование стандарта .Net во всех DLL может быть вариантом. Я попробую это и увижу, у меня это получится. Но я все еще не понимаю, работают ли «microsoft.aspnet.identity» и «microsoft.aspnetcore.identity» в стандартной библиотеке .Net.

Результат: я смог использовать «Microsoft.AspNetCore».Identity "," Microsoft.EntityFrameworkCore "в библиотеке .Net Standard 2.1 (Microsoft .EntityFrameworkCore поддерживается в .Net Standard 2.1 и net Core 3.0). Так что это хорошая новость (мне не нужно переносить все библиотеки DLL на .Net Core только для идентификации. Переход на стандарт .Net был бы достаточен). Но Я не могу сослаться на эту .Net Standard 2.1 DLL в .Net Framework DLL / App, потому что .Net Framework поддерживает ее до .Net Standard 2.0 ... Так что это не решает проблему полностью,но, похоже, это ближе всего к тому, что я хочу сделать.

Update2

Я готов изменить много кода для этого изменения. F.ex. Аутентификация в старом WebApp, чтобы он общался с IdentityServer и удалял все, что связано с System.Web (.Security) во всех проектах. Одна вещь, которая все еще смущает меня, является "microsoft.aspnet.identity" против "microsoft.aspnetcore.identity". Должен ли я выбрать один из них для всех проектов или я могу смешать эти пространства имен (в зависимости от структуры проектов), но просто сохранить одну базу данных.

Update3 Я отметил ответ, потому чтоэто помогло ответить на мой основной вопрос («это не возможно»). Я постараюсь это реализовать и увижу, что на поверхности будет больше проблем. Но если у кого-то есть больше идей / опыта по этой теме, пожалуйста, не стесняйтесь поделиться этим здесь.

Некоторые из источников, которые я использовал:

1 Ответ

2 голосов
/ 18 октября 2019

Несмотря на то, что ASP.NET имеет оба имени, ASP.NET Core представляет собой совершенно другую среду, чем ASP.NET. Люди, похоже, не понимают, что это не просто прыжок с версией: вам придется переписать ваше приложение.

Членство в ASP.NET (System.Web.Security) устарела и на 100% не поддерживается в .NET Core. Это не изменится, и здесь нет обходного пути. Если вы хотите выполнить аутентификацию в ASP.NET Core, вам придется начинать с нуля.

Поскольку вы хотите использовать Identity Server, в любом случае вы все равно можете поддерживать свое устаревшее приложение Web Forms, но вы 'Придется перенести всю аутентификацию на Identity Server, а затем использовать Identity Server в качестве механизма аутентификации в приложении Web Forms. Опять же, это будет требовать внесения изменений в приложение Web Forms. Здесь нет другой опции.

На стороне Identity Server вы можете отказаться от удостоверения ASP.NET. Identity Server - это просто поставщик аутентификации;это не касается управления пользователями. Технически вы можете продолжать использовать ваши старые пользовательские таблицы, но вам нужно будет создать собственный профиль и поставщиков хранилищ пользователей для Identity Server, чтобы он мог выполнять работу, которая ему необходима. Честно говоря, вам лучше просто начать сначала с Identity, чем выполнять кучу работы, чтобы попытаться поддержать систему управления пользователями, которая давно устарела.

Долго и коротко, здесь нет ничего тривиального. Если вы хотите сделать то, о чем говорите, вы начинаете проект major , который потребует огромных усилий и внесет изменения в каждую часть вашего приложения. Так оно и есть. Если вы не готовы к этому, то придерживайтесь того, что у вас есть.

...