7

cookieless セッションを使用していて login.aspx の名前を httphandler に変更できない場合、無限ログイン ループの問題をどのように解決しますか?

つまり、管理者権限を持つユーザーがログアウト ボタンをクリックし、制限されたページへの戻り URL が login.aspx に渡されると、管理者権限を持たない別のユーザーがログインしようとすると、ログイン ページにリダイレクトされます。

私はこの解決策に出くわしましたが、login.aspx の名前を http ハンドラーに変更することはできません。フォーム認証チケットが URL から取り除かれているように見えるため、isauthenticated 関数は Cookie なしの認証を使用する aspx ページでは機能しないようです。ログインページにリダイレクトされたとき。

編集:

このアプリケーションは既に運用されているため、ログイン/ログアウト/タイムアウト プロセスのページ フローを変更したり、ログイン ページの名前を変更したりすることはできません。

4

6 に答える 6

2

login.aspx ページにログインした後、returnUrl でページへのアクセスがユーザーに許可されているかどうかを確認します。UrlAuthorizationModule の次のメソッドを使用できます (または、最適に機能する場合はカスタムのメソッドを使用できます)。

System.Web.Security.UrlAuthorizationModule.CheckUrlAccessForPrincipal(

     returnUrl,
     userPrincipal, 
     GET");

ユーザーが承認されていない場合は、ユーザーがアクセスできるページにリダイレクトするだけです。

ユーザー プリンシパルを取得するには:

var roles = System.Web.Security.Roles.GetRolesForUser(username);

var principal = new System.Security.Principal.GenericPrincipal(

   new System.Security.Principal.GenericIdentity(username), 

   roles

);
于 2009-02-19T01:07:49.633 に答える
1

同様の問題が発生し、次のようにして修正しました。

If "LogOut".Equals(e.CommandName) Then
    FormsAuthentication.SignOut()
    Response.Redirect("~/Login.aspx")
End If

次に、Login.aspxで、ユーザーをLogin.aspxに戻すReturnUrlパラメーターが含まれている場合は、PostBackUrlをLogin.aspxに変更します。

于 2009-02-18T18:01:14.590 に答える
1

いくつかのオプション...

1 つは、ユーザーがログアウトしたときに手動で Login.aspx にリダイレクトするため、ReturnURL がありません。セッション タイムアウトに合わせてページのメタリフレッシュを行い、ユーザーが突然アクセスできなくなったリソースをクリックしないようにします。

2 つ目は、常に Login.aspx の Page_Load で誰かをログアウトすることです。ねえ、どうして?いくつかの理由が考えられますが、あなたの状況には当てはまらないかもしれません。

3 つ目は、ReturnURL を無視することです。RedirectFromLoginPage を呼び出す必要はありません。ログイン時にユーザーをデフォルトのランディング ページにリダイレクトします。

于 2009-02-15T05:32:00.747 に答える
0

ページフローを変更してもらえますか?

つまり、ユーザーがリソースにアクセスできないときにlogin.aspxページにリダイレクトするのではなく、情報ページにリダイレクトします。

このページでは、リダイレクトの理由を説明し、次のようなオプションを提供します。

1. Click here to login as another user.
2. Click here to request access to the page.
3. Click here to login again, if your session has expired.

これにより、循環参照が削除され、問題が発生します。

于 2009-02-14T21:27:50.303 に答える
0

Request.UrlReferrerがログインページであるかどうかを確認し、許可されている場合はRequest.Urlへのアクセスが許可されているかどうかを確認し、許可されていない場合は「このページを表示する権限がありません」にリダイレクトするhttpモジュールを追加するのはどうでしょうか。ページ。

于 2009-02-20T08:06:12.070 に答える
0

login.aspx の名前を HTTP ハンドラーに変更することはできないとおっしゃっていますが、HTTP 301 リダイレクトを追加して、login.aspx が要求されるたびにサーバーがユーザーを HTTP ハンドラー (login.ashx など) にリダイレクトするようにしてみましたか?

于 2009-02-20T13:32:44.237 に答える