Я работаю над внутренним веб-инструментом для своей компании. Часть этого инструмента является другим приложением (Панель инструментов Круиз-контроля), который работает в ее собственном Виртуальном каталоге в соответствии с моим корневым приложением.
Я хотел ограничить доступ к этому внутреннему приложению путем установки Аутентификации Форм на нем и наличия формы входа в систему в корневом приложении.
Я поместил следующее в корневые приложения web.config:
<location path="ccnet">
<system.web>
<authentication mode="Forms">
<forms loginUrl="/default.aspx" timeout="5000"/>
</authentication>
<authorization>
<allow users="?"/>
<deny users="?"/>
</authorization>
</system.web>
</location>
Однако Аутентификация Форм, кажется, не работает, она не перенаправляет назад к странице входа в систему, когда я получаю доступ к тому приложению непосредственно.
У меня есть чувство, что я имею <позволение> и <отклоняю> набор тегов неправильно. Кто-то может разъясниться?
Вы, возможно, также должны были бы поместить путь = "/" в <тег (теги) форм, я думаю. Извините, его некоторое время, так как я сделал это
Вы, возможно, также должны были бы поместить путь = "/" в
Вот и все!
Так, Сводка, inorder todo это;
В корне добавляют web.config:
<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />
Это должно быть сделано, потому что по умолчанию это - "AutoGenerate, IsolateApps".
Во-вторых, необходимо назвать cookie Автора формы тем же в обоих, я сделал это все в своем корне, с помощью тега местоположения:
<authentication mode="Forms">
<forms name="ccAuth" loginUrl="/default.aspx" path="/" timeout="5000"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
Наконец:
<location path="ccnet">
<system.web>
<authentication mode="Forms">
<forms name="ccAuth" loginUrl="/default.aspx" path="/" timeout="5000"/>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
Спасибо все для Вашей справки. Это было stumper.
Где тот код находится Jonathan? По моему опыту, у меня есть управление входом в систему, и в событии OnAuthenticate я установил бы Аутентифицируемый во лжи...
If CustomAuthenticate(Login1.UserName, Login1.Password) Then
FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
Else
e.Authenticated = False
End If
Но это использует Microsoft Way
Это не работает, это все еще позволяет всем пользователям, (Аутентифицируемый или не) к доступу.
Я думал бы, что Вы могли даже опустить позволить тег, поскольку это избыточно. Просто:
<deny users="?"/>
FormsAuthentication шифрует маркеры, которые он дает пользователю, и по умолчанию он шифрует ключи, отличающиеся для каждого приложения. Чтобы заставить Автора Форм работать через приложения, существует несколько вещей, которые необходимо сделать:
Во-первых, определите Автора Форм "имя" то же на всех Приложениях. Это, покончите:
<authentication mode="Forms">
<forms name="{name}" path="/" ...>
</authentication>
Определите "имя", чтобы быть тем же в обоих приложениях web.configs.
Во-вторых, необходимо сказать обоим приложениям использовать тот же ключ при шифровании. Это немного сбивает с толку. То, когда я настраивал это, все, что я должен был сделать, было, добавляют следующие к обоим web.configs:
<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />
Согласно документам, это - значение по умолчанию, но оно не работало на меня, если я не указал его.
Вы позволяете все неаутентифицируемые. Вы могли бы искать что-то вроде этого
<deny users="?"/>
Каково расширение файла для этого приложения круиз-контроля? Если это не будет тип файла, который ASP.NET регистрируется для обработки (например, jsp, Java, и т.д.), то ASP.NET не будет действовать как механизм аутентификации (на IIS 5 и 6). Например, для статических файлов HTML, если Вам не реализовали подстановочный знак, отображающийся, IIS делает всю аутентификацию и авторизацию и подает файл, не включая ASP.NET isapi расширение. IIS7 может использовать новый интегрированный конвейерный режим для прерывания всех запросов. Для IIS6 Вы захотите посмотреть на статью Scott Gu о вопросе.