5

以下のコードを使用して実装されたカスタム ロール プロバイダーをセットアップしましたが、使用されていないようで、代わりに既定のプロバイダーが使用されています。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();
    }
}
4

1 に答える 1

5

これは、IIS Express が Windows 認証を使用するように設定されていないことが原因でした。修正するには、ソリューション エクスプローラーでプロジェクトを選択し、[プロパティ] ウィンドウ セットWindows Authentication = Enabledを開いてAnonymous Authentication = Disabled. カスタム ロール プロバイダーが機能するようになりました。

于 2014-08-25T17:42:44.433 に答える