Подтвердить что ты не робот

Использование одной базы данных членства Asp.net с несколькими приложениями Single Sign On

У меня есть два приложения asp.net на одном сервере IIS, и я хотел бы использовать ту же самую базу данных asp_security и членство. Я читал, что все, что мне нужно сделать, это ссылаться на одно и то же имя приложения в обоих веб-конфигурациях, как я сейчас делаю, но я должен что-то делать неправильно

В каждом приложении web.config у меня есть этот раздел.

<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider"
              type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
              connectionStringName="membership"
              enablePasswordRetrieval="false"
              enablePasswordReset="true"
              requiresQuestionAndAnswer="false"
              applicationName="/"
              requiresUniqueEmail="false"
              minRequiredPasswordLength="5"
              minRequiredNonalphanumericCharacters="0"
              passwordFormat="Hashed"
              maxInvalidPasswordAttempts="5"
              passwordAttemptWindow="10"
              passwordStrengthRegularExpression=""
              />
  </providers>
</membership>

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

4b9b3361

Ответ 1

Просто ради закрытия, я отвечу, как я достиг цели, о которой хотел задать мой первоначальный вопрос.

У меня было два приложения asp.net на одном сервере IIS. Моя цель - сделать так, чтобы при входе пользователя в приложение 1 пользовательские учетные данные были доступны в приложении2. Настройка поставщика членства asp.net - всего лишь один шаг от того, что я искал. Даже если оба приложения используют одну и ту же базовую базу данных и поставщика, я все равно не буду аутентифицироваться, когда я нажму приложение 2. То, что я искал, было решением Single Sign On.

Как только у вас есть оба приложения, указывающие на вашу базу данных asp_membership, разместив следующее в разделе system.web вашей веб-конфигурации

<authentication mode="Forms" />
<membership>
  <providers>
    <clear/>
    <add name="AspNetSqlMembershipProvider"
              type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
              connectionStringName="membership"
              applicationName="/"
              />
  </providers>
</membership>
<roleManager enabled="true" />

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

Я использовал IIS 6, поэтому настроил его, чтобы автогенерировать машинный ключ для обоих приложений. Поскольку оба этих приложения работают на одной машине, ключ будет идентичным, это критическая часть для работы SSO. После настройки IIS в мой web.config был добавлен следующий

    <machineKey decryptionKey="AutoGenerate" validation="SHA1" validationKey="AutoGenerate" />

Вот и все. Как только это будет сделано, я могу войти в приложение 1, а затем перейти к app2 и сохранить учетные данные безопасности.

Спасибо за толкание в правильном направлении.

Ответ 2

Если мое понимание служит мне правильно, учетные записи аутентификации пользователей хранятся в контексте HTTP каждого приложения. Таким образом, переход между двумя приложениями не будет автоматически аутентифицировать пользователя, поскольку новый контекст будет создан при переключении на приложение B.

Я считаю, что правильным подходом было бы использовать свойство DefaultCredentials (или UseDefaultCredentials для True) текущего пользователя до перехода в приложение B.

Когда вы говорите, переключите, что вы имеете в виду, например. открыть другое окно браузера и получить доступ к приложению B или запросить страницу из appB из appA?