Как иметь несколько логинов с ASP.Net? - PullRequest
2 голосов
/ 09 марта 2009

Я работаю над сайтом с внутренним и внешним разделом.

Пользователи обоих разделов разные, поэтому им нужна другая страница входа. Я хотел настроить аутентификацию по-разному для обеих папок, но ASP.Net, но это не разрешено.

Пример (в моем главном web.config):

<authentication mode="Forms">
    <forms loginUrl="~/Pages/Internal/Main.aspx" defaultUrl="~/Pages/Internal/Main.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/" protection="All" slidingExpiration="true" timeout="45"/>
</authentication>

А во внешней подпапке я пытаюсь перезаписать настройки:

<authentication mode="Forms">
    <forms loginUrl="~/Pages/External/Default.aspx" defaultUrl="~/Pages/External/Default.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/Pages/External" protection="All" slidingExpiration="true" timeout="45"/>
</authentication>

Однако это дает мне ошибку.

Я попытался поместить их обоих в подпапки, но я получаю ту же ошибку, раздел конфигурации аутентификации должен быть установлен на уровне приложения (я предполагаю, что это означает root web.config).


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

Это будет работать, но если это возможно, я бы хотел найти решение, в котором я могу настроить это в файле web.config.

Спасибо

Ответы [ 4 ]

1 голос
/ 09 марта 2009

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

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

Если вам нужно пройти аутентификацию в двух магазинах, вы можете сделать это с помощью специального провайдера. Модель входа в ASP.NET допускает создание пользовательских провайдеров, и ее очень легко создать: http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx http://msdn.microsoft.com/en-us/library/aa479048.aspx

Теперь, если вам нужно перенаправить на разные страницы (вы застряли в этой модели по какой-то причине?), Вы можете сделать это по IP-адресу. Вероятно, ваша внутренняя сеть использует IP-схему с 10 или 19 точками. Если это так, эти адреса передаются на внутренний. Остальное на внешний. Это потребует от вас настройки чего-то, что выполняет перенаправление. Я знаю, что вы можете сделать это на странице входа в систему, если не с обработчиком HTTP.

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

0 голосов
/ 15 ноября 2010

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

Возможно, не самое элегантное решение, но достаточно простое:

    Public Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs)
        If Page.IsValid Then
            Dim userLogin As String = ""

            userLogin = System.Guid.NewGuid.ToString
            FormsAuthentication.RedirectFromLoginPage(userLogin, False)
            ' place a url param throughout my app, only four pages so no 
            ' big problem there in this case g stands for guest           
            Response.Redirect("menu.aspx?m=g", False)

        End If
End Sub

Затем в Global.asax:

    Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As System.EventArgs)

        If Not Request.IsAuthenticated And _
(Not Request.RawUrl.ToLower.Contains("guestlogin.aspx")) And _
(Not Request.RawUrl.ToLower.Contains("registeredlogin.aspx")) And _
(Not Request.RawUrl.ToLower.Contains("mobilelogin.aspx")) Then
            Response.Redirect("spLogin.aspx?m=" & Request.QueryString("m"))
        End If

    End Sub

Затем на странице входа (указанной в вашем файле Web.config):

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Page.IsPostBack Then
    if request.querystring("m")="g" then
                    Response.Redirect("guestlogin.aspx?m=g")

    elseif  request.querystring("m")="r" then
                    Response.Redirect("registeredlogin.aspx?m=r")
    elseif  request.querystring("m")="m" then
                    Response.Redirect("mobilelogin.aspx?m=m")

end if
End If
End Sib
0 голосов
/ 09 марта 2009

Если ваш сайт представляет собой одно веб-приложение, вы, вероятно, могли бы использовать для этого модель поставщика ролей ASP.NET, имея две роли: одну для внутренних и одну для внешних страниц (вы можете настроить эту папку pr с помощью элемент конфигурации).

Для получения дополнительной информации см. http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspx

0 голосов
/ 09 марта 2009

Если вы можете запускать как два разных приложения IIS, у вас могут быть разные провайдеры аутентификации (или разные экземпляры одного и того же провайдера ... возможно, для различий используется одна и та же база данных с атрибутом приложения на провайдере).

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

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

...