ASP.NET-カスタムフォーム認証。 チートシート

サイトに認証の実装を記述する方法は多数あります。 承認用の独自のプロバイダーを作成し、それをWeb構成に登録するかなり簡単な方法を提供します。 このメソッドを使用すると、Login、LoginStatusなどの標準コントロールを使用できます。

ユーザー認証用の独自のMembershipProvider


ステップ1: System.Web.Security.MembershipProviderから継承し、クラスを実装し、必要なメソッドをオーバーライドします。 主なものはValidateUserで、システム内のユーザーの認証を担当します。
namespace Providers
{
public class CustomMembershipProvider : MembershipProvider
{
public override bool ValidateUser( string username, string password)
{
return myUserManager.ValidateUser(username, password); //
}
...
}
}


再定義したくないメソッドは、次のように残すことができます。
public override bool UnlockUser( string userName)
{
throw new Exception( "The method or operation is not implemented." );
}


必要に応じて、いつでも実装できます。

ステップ2: web.configに記述されています:
< system.web >
< membership defaultProvider ="CustomMembershipProvider" >
< providers >
< clear />
< add name ="CustomMembershipProvider" type ="Providers.CustomMembershipProvider" />
</ providers >
</ membership >
</ system.web >


また、フォーム認証で行うことを登録する必要があることを忘れないでください。
< authentication mode ="Forms" >
< forms defaultUrl ="~/Default.aspx" timeout ="120" loginUrl ="~/Login.aspx" />
</ authentication >


これで、認証が必要な理由を忘れずに、認証ページにログインコントロールをスローして使用できます。
< authorization >
< deny users ="?" />
< allow users ="*" />
</ authorization >



ユーザーロールを定義するためのカスタムRoleProvider


ステップ1: System.Web.Security.RoleProviderから継承し、クラスを実装し、必要なメソッドをオーバーライドします。
namespace Providers
{
public class CustomRoleProvider : RoleProvider
{
public override string [] GetRolesForUser( string username)
{
return myUserManager.GetUser(username).Roles; //
}
}
}


ここでも、未使用のメソッドは実行をスローしたままにすることができます。
public override string [] GetUsersInRole( string roleName)
{
throw new Exception( "The method or operation is not implemented." );
}


ステップ2: web.configに記述されています:
< system.web >
< roleManager enabled ="true" defaultProvider ="CustomRoleProvider" >
< providers >
< add name ="CustomRoleProvider" type ="Providers.CustomRoleProvider" />
</ providers >
</ roleManager >
</ system.web >


すべてを使用できます。 たとえば、次のように:
< authorization >
< deny roles ="Admin" />
</ authorization >


結論として、Unityを使用してプロバイダーに依存関係を注入する例を示します。
if (Roles.Enabled)
_unityContext.Container.BuildUp(Roles.Provider.GetType(), Roles.Provider);
_unityContext.Container.BuildUp(Membership.Provider.GetType(), Membership.Provider);


* This source code was highlighted with Source Code Highlighter .


Source: https://habr.com/ru/post/J96601/


All Articles