Членство в ASP.NET с настраиваемым MachineKey для нескольких приложений и угроз безопасности - PullRequest
2 голосов
/ 21 октября 2011

Это своего рода вопрос из двух частей. Итак, я начну с первого, которое приведет ко второму. Я размещаю сайт в GoDaddy, где в корне находится основное веб-приложение. Однако в подпапке я создал второе веб-приложение. Оба из которых используют проверку подлинности с помощью форм с поддержкой членства ASP.NET в общей базе данных. То есть оба используют базу данных aspnetdb. То, что я пытаюсь сделать, это возможность войти в один и, следовательно, войти в оба. Единый вход (SSO), если хотите. До сих пор я обнаружил, что если приложения находятся на одном сервере (экземпляр IIS), они, следовательно, используют один и тот же MachineKey. Из того, что я обнаружил, и из моего понимания проверка подлинности с помощью форм использует MachineKey для генерации билета проверки подлинности. Поэтому никаких изменений не требуется, если имя приложения для провайдеров членства, роли и профиля совпадает.

Пока я точен?

Но я не смог заставить это работать. Таким образом, я попробовал две другие идеи без преобладания. Я добавил следующее в оба файла Web.config (отдельно, конечно, не вместе).

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

или

<machineKey
validationKey="93A258D47F48AF07AB8BE3EF56C9D32897B9C458F2E14DB6F9AA47D77E40F4CA763D4BD56C2900B507073023F4C43C583A1F7086C2DD327C879368B0449EFB10"
decryptionKey="6BE371E3CDE768B71D0D261370127BAE094984D207EFD4B55FB24384FE1795D1"
validation="SHA1" decryption="AES" />

Сгенерировано из http://aspnetresources.com/tools/machineKey

И пример конфигурации членства

<membership 
    defaultProvider="SqlProvider"
    userIsOnlineTimeWindow="20">
    <providers>
        <remove name="AspNetSqlProvider" />
        <add name="SqlProvider"
            type="System.Web.Security.SqlMembershipProvider"
            connectionStringName="aspnetdb"
            enablePasswordRetrieval="false"
            enablePasswordReset="true"
            requiresQuestionAndAnswer="true"
            passwordFormat="Hashed"
            applicationName="/" />
    </providers>
</membership>

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

Следующий вопрос: если это работает, и кто-то должен был загрузить приложение и загрузить его на свой веб-сайт. И если в приложении Web.config указан MachineKey, такой как сгенерированный выше, и они оставляют имя приложения по умолчанию, такое как «/», может ли это быть угрозой безопасности? Это означает, что если человек А загрузил приложение, а человек Б загрузил одно и то же приложение, пользователь мог пройти аутентификацию на одном и, следовательно, быть аутентифицированным при второй установке. Имейте в виду, что человек А и человек Б не имеют никаких отношений, кроме того, что они оба загрузили одно и то же приложение и оставили его с настройками по умолчанию.

Ссылки:

http://msdn.microsoft.com/en-us/library/ff649308.aspx

http://help.ablecommerce.com/faqs/ablecommerce_7/how_do_i_install_to_a_shared_hosting_environment_.htm

http://rtur.net/blog/post/2009/03/30/Using-machineKey-with-ASPNET-Membership.aspx

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

[Update] - Я полон решимости найти решение этой проблемы в ближайшее время. Если вы также ищете решение, следите за обновлениями ...

...