0

私は「メンバーシップ」フレームワークを使い始めています (過去 5 回の投稿からお気づきかもしれませんが)。

私のコードではSqlMembershipProvider、データベースがデフォルトで必要なスキーマに適合しないため、クラスを継承して関数をオーバーライドしています。

そこで、私が聞きたい質問は次のとおりです。

Membershipアプリケーション内で使用したい関数を使用して独自のクラスを作成できるのに、なぜクラスを使用する必要があるのでしょうか?

フレームワークも同様Rolesです。

4

3 に答える 3

3

簡単な答え: セキュリティに関して言えば、自分が何をしているのかを知っていると思い込まないでください。自分でやろうとすると、おそらく間違っているでしょう!

セキュリティが難しい!

Microsoft は、メンバーシップ フレームワークとロール フレームワークの実装に多くのリソースを費やしてきました。それらがあなたのニーズに合っている限り、なぜあなた自身のものを作るのですか? また、標準フレームワークを使用することで、ソリューションは、同じフレームワークを使用する他のプロジェクトと互換性があります。これは、あなたのケースでは問題になる場合とそうでない場合があります。

于 2012-08-24T12:47:49.017 に答える
1

まず第一に、既存のユーザー データベースがある場合は、おそらくSqlMembershipProviderそれを使用するように強制するべきではありません。SqlMembershipProviderは抽象MembershipProviderクラスの完全な実装であり、正しく機能するには正しいスキーマを持つデータベースが必要です。

代わりに、抽象MemberShipProviderクラスの独自の実装を作成する必要があります。開始するには、クラスCoultonsMemebshipProviderを作成し、それを から派生させSystem.Web.Security.MembershipProviderます。次に、 MembershipProvider内にカーソルを置いてクリックし、[ Implement abstract class...Ctrl+. ]を選択します。Visual Studio は、実装できるメソッドの多くのコードを追加します。

VS に挿入されたコードを最初に見た後、このタスクは確かに気が遠くなるように見えます。ただし、実際に実装する必要があるのは、アプリケーションが必要とする部分だけであることを忘れないでください。必要のないメソッドとプロパティについては、デフォルトのままにしておいてかまいません。throw new NotImplementedException();

なぜメンバーシップ クラスを使用する必要があるのか​​...」という質問に対して、答えは簡単です。これは、認証スキームを構築する際に正しい方向に導く、試行錯誤され、よく考え抜かれた抽象化です。

とはいえ、実際にはメンバーシップ プロバイダーが必要ないと強く感じている場合でも、メンバーシップ プロバイダーを使用FormsAuthenticationしてそのメリットを得ることができます。このオプションを詳しく知りたい場合は、Scott Mitchell による FormsAuthentication に関するこのチュートリアル(特に導入部) をご覧ください。

于 2012-08-24T13:43:33.803 に答える
0

Asp.net は、「メンバーシップ」フレームワークへの多くのフックを提供します。

必要に応じてカスタマイズできます。CustomMembership プロバイダーの実装を見てください。

これにより、テーブルでその認証を行いながら、フレームワークの一部になることができます。

public class MyMembershipProvider : MembershipProvider
{ 
        public override bool ValidateUser(string username, string password)
        {    
            //check user credentials
            return IsUserValid;
        }
}

web.config:

  <membership defaultProvider="MyMembershipProvider">
      <providers>
        <clear />
        <add name="MyMembershipProvider"
             applicationName="MyApp"
             Description="My Membership Provider"
             passwordFormat="Clear"
             connectionStringName="MyMembershipConnection"
             type="MyApp.MyMembershipProvider" />
      </providers>
    </membership>
于 2012-08-24T12:53:26.457 に答える