以下のコードを使用して実装されたカスタム ロール プロバイダーをセットアップしましたが、使用されていないようで、代わりに既定のプロバイダーが使用されています。HomeController を[Authorize(Roles = "Administrator")]
属性で装飾すると、CustomRoleProvider
コンストラクターが呼び出されます (ブレークポイントがヒットするかどうかを確認するためにコンストラクターのみを含めました) が、どのメソッドも呼び出されていません。そして、HTTP Error 401.0 - Unauthorized
ページが残ります。
必要なビットを web.config に追加する以外に、Windows 認証を機能させるために何もしていません。含めないと<allow users="*"></allow>
(明らかにAuthorize
属性を含めないで)401.2.: Unauthorized: Logon failed due to server configuration
エラーが発生するため、機能していると思います。認証されていると思います。
このSO投稿に従ってブラウザのCookieをクリアしましたが、効果はありませんでした。
CustomerRoleProvider
public class CustomRoleProvider : RoleProvider
{
public CustomRoleProvider()
{
}
public override bool IsUserInRole(string username, string roleName)
{
bool isUserInRole = false;
// omitted for brevity
return isUserInRole;
}
public override string[] GetRolesForUser(string username)
{
string[] roles = null;
// omitted for brevity
return roles;
}
// omitted for brevity
}
web.config
<authentication mode="Windows">
</authentication>
<authorization>
<allow users="*"></allow>
<deny users="?"/>
</authorization>
<roleManager defaultProvider="CustomRoleProvider" enabled="true">
<providers>
<clear />
<add name="CustomRoleProvider" type="ProjectName.UI.Mvc.Code.Providers.CustomRoleProvider" />
</providers>
</roleManager>
ホームコントローラー
[Authorize(Roles = "Administrator")]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}