0

プロジェクトにSimpleMembershipを実装するのに問題があります。基本的に、ページへのアクセスを制限することに関する情報を見つけることができませんでした。これは私がこれまでに行ったことです:

  1. default.aspxというログインページがあります。これをweb.configに追加することで、ログインページとしてdefault.aspxを認識するようにSimpleMembershipを構成できました。
<appSettings>
    <add key="loginUrl" value="default.aspx" />
</appSettings>
  1. default.aspxにWebMethodがあり、WebSecurity.Loginを介してユーザー資格情報を検証します。私はjqueryajaxを介してWebMethodを呼び出しています:
[WebMethod, ScriptMethod]
public static bool Login(string userName, string password)
{
    return SecurityManager.Instance.Login(userName: userName, password: password);
}
  1. jqueryコードのajaxサクセスハンドラーで、保護する必要のある別のページ(home.aspx)にユーザーをリダイレクトしています。
success: function (data, textStatus, jqXHR) {
    if (data.d) {
        window.location.href = "home.aspx";
    }
    else {
        $("#invalidCredentialsBox").css("visibility", "visible");
    }
},

問題は、home.aspxに直接(ブラウザから)アクセスしようとすると、実際に読み込まれることです。では、ユーザーが正常にログに記録されるまでhome.aspxへのアクセスを制限するためにSimpleMembershipを作成するにはどうすればよいですか?

私がしなければならなかったことは、それが正しい解決策であるかどうかはわかりませんが、app_codeフォルダーに基本クラスを作成することです。クラスはSystem.Web.UI.Pageから継承し、home.aspxをこの基本クラスから継承するように変更しました。基本クラスのコンストラクターで、WebSecurity.IsAuthenticatedプロパティをチェックしており、それがfalseの場合は、Response.Redirectをerror.aspxページに移動します。

namespace MyProject
{
    public class BasePage : System.Web.UI.Page
    {
        public BasePage()
        {
            if (!SecurityManager.Instance.IsAuthenticated())
            {
                HttpContext.Current.Response.Redirect("error.aspx");
            }
        }
    }
}

このように機能しますが、正しい実装方法ではないと思います。私が見つけたすべての例はMVCを使用していますが、私はそうではなく、実際にはMVCについてほとんど何も知りません。SimpleMembershipが.netWebプロジェクトで使用されているのと同じドキュメント/例を誰かに教えてもらえますか?

また、web.configのappSettingsセクションに追加できるSimpleMembershipに有効な他の属性は何ですか?また、web.configの認証セクションをSimpleMembershipで機能するように設定する方法(MVC 4テンプレートで、SimpleMembershipを使用していても、web.configのフォーム認証セクションを設定していることを確認しました)

ありがとう。

4

1 に答える 1

1

承認と認証を混同しないでください。

承認により、誰が何にアクセスできるかが決まります。

次のように設定できます

<authorization>
  <allow users="Kim"/>
  <allow roles="Admins"/>
  <deny users="John"/>
  <deny users="?"/>
</authorization>

参照:Asp.net認証

メンバーシッププロバイダーが認証を担当します。その責任は、ユーザーが本人であることを確認することだけです。

ログインページ、デフォルトページ、全員がアクセスできるパブリックフォルダーなど、Webサイトの一部に異なる承認ルールが必要な場合は、location要素を使用してそのセクションを作成できます。

これにより、サイトの他の部分が制限されている場合でも、すべてのユーザーがLogon.aspxにアクセスできるようになります。

   <location path="Logon.aspx">
      <system.web>
         <authorization>
            <allow users="*"/>
         </authorization>
      </system.web>
   </location>
于 2013-01-03T04:13:47.843 に答える