2

私は、内部セクションと外部セクションを持つ Web サイトに取り組んでいます。

両方のセクションのユーザーは異なるため、異なるログイン ページが必要です。両方のフォルダーに対して異なる認証を構成したかったのですが、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>

ただし、これによりエラーが発生します。

両方をサブフォルダーに入れてみましたが、同じエラーが発生します。認証構成セクションはアプリケーションレベルで設定する必要があります (ルート web.config を意味すると思います)。


考えられる解決策は、ログイン ページを集中化し、リクエストの送信元に応じてリダイレクトすることです。外部ページから送信された場合は外部ログイン ページに送信し、それ以外の場合は内部ページに送信します。

それは機能しますが、可能であれば、web.configでこれを構成できるソリューションが欲しいです。

ありがとう

4

4 に答える 4

0

サイトが単一のWebアプリケーションである場合は、ASP.NETロールプロバイダーモデルを使用して、内部ページ用と外部ページ用の2​​つのロールを使用できます(<location>構成でそのpr。フォルダーを構成できます)エレメント)。

詳細については、http://msdn.microsoft.com/en-us/library/9ab2fxh0.aspxを参照してください。

于 2009-03-09T14:35:18.983 に答える
0

2 つの異なる IIS アプリケーションとして実行できる場合は、異なる認証プロバイダー (または同じプロバイダーの異なるインスタンス...おそらくプロバイダーのアプリケーション属性を使用して同じデータベースを使用して区別) を持つことができます。

ただし、Web アプリが異なるということは、状態 (アプリケーションとセッション) が共有されず、インストールが重複することを意味します。イントラネット/インターネットの場合、これにより、インターネット ユーザーがアクセスできないコンポーネントを外部展開に含めることができなくなります (したがって、表面積を減らすことでセキュリティが向上します)。

それ以外の場合は、ログインしているユーザーに応じて組み込みのいずれかに転送するカスタム認証プロバイダーが必要になる場合があります。

于 2009-03-09T14:29:10.560 に答える
0

誰かに役立つかもしれないこれを処理する簡単な方法があります。基本的に、ゲストログインと登録ユーザーに同じコードを使用できるようにしたいと考えています。また、認証チケットの有効期限が切れたときに別のログイン ページに送信したい Web サイトのモバイル バージョンもあります。

おそらく最もエレガントなソリューションではありませんが、十分に単純です。

    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
于 2010-11-15T04:15:32.673 に答える