Дублирование имени пользователя HttpContext в разных приложениях

#c# #asp.net-mvc #iis #httpcontext #authentication

#c# #asp.net-mvc #iis #httpcontext #аутентификация

Вопрос:

Итак, у меня проблема. У меня есть собственный класс CustomMembership, который я использую практически во всех моих приложениях MVC, и этот пользовательский класс наследует ‘MembershipProvider’.

каждое приложение имеет свою собственную базу данных пользователей, и поэтому информация о пользователе редко копируется в отдельных приложениях, если только у людей нет учетных записей в каждом из них. В любом случае, с момента их развертывания я все больше и больше понимаю, что HttpContext реплицируется в этих приложениях через IIS. У меня есть 2 основные проблемы:

  1. Кто-то войдет в систему как ‘user1’, но HttpContext возвращает имя пользователя для ‘user3’
  2. Пользовательский контекст из одного приложения будет находиться в кэше, сеансе или чем-то еще, а затем отображаться в другом приложении. Например. Я собирался протестировать приложение, и оно выдало мне исключение при выборе ролей пользователей, потому что имя пользователя, которое оно искало, существует не в этом приложении, а в другом, и по какой-то причине рекламируется как текущий контекст.

Это вызывает недоумение, мне было интересно, не упустил ли я чего-то или не смог что-то инициализировать. Ниже приведена копия раздела аутентификации пользователя в моей веб-конфигурации.

 <authentication mode="Forms">
  <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication>
<membership defaultProvider="CustomMembershipProvider">
  <providers>
    <clear />
    <add name="CustomMembershipProvider" type="HRUpdate.App_Data.CustomMembershipProvider" connectionStringName="HRpimEntities" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="/" />
    <!--<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="ApplicationServices" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" passwordStrengthRegularExpression="" applicationName="/"/>-->
  </providers>
</membership>
<roleManager defaultProvider="MyRoleProvider" enabled="true" cacheRolesInCookie="true">
  <providers>
    <clear />
    <add name="MyRoleProvider" type="HRUpdate.App_Data.MyRoleProvider" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" writeExceptionsToEventLog="false" />
  </providers>
</roleManager>
  

Комментарии:

1. Является ли ваш класс CustomMembership статическим классом со статическим членом Username?

2. Нет статического класса. Мой класс членства определяется как таковой: общедоступный класс CustomMembershipProvider: MembershipProvider {…}