具有 Windows 身份验证的自定义角色提供者

Custom Role Provider with Windows Authentication

我们在 ASP.NET 网络表单 Intranet 站点中有一个自定义角色提供程序。我们已确保此 class 从 RoleProvider 继承并实现适当的方法。但是,很明显它的方法并没有被调用,包括Initialize。我们在 web.config 中有以下内容:

<authentication mode="Windows" />

<authorization>
    <allow roles="CRM"/>
    <deny users="?"/>
</authorization>

<roleManager defaultProvider="MyRoleProvider"
    enabled="true"
    cacheRolesInCookie="true">
    <providers>
        <clear />
        <add
            name="MyRoleProvider"
            applicationName="MyApp"
            type="MyApp.MyRoleProvider"
            writeExceptionsToEventLog="false" />
    </providers>
</roleManager>

需要注意的是,我们已经审阅了this问题,但其答案不适用于我们的情况。

我觉得必须提供这个答案是个傻瓜,但希望它可以帮助遇到类似问题的人。虽然似乎所有证据都表明自定义角色提供程序未被调用,但它确实被调用了。由于我们的角色被缓存,它似乎没有被调用。正如您在上面的代码片段中看到的,我们有以下内容:

cacheRolesInCookie="true">

这导致角色管理器提取了我们没有预料到的角色,因为我们在测试期间正在操纵它们。当我们将 属性 更改为 "false" 时,一切都按预期开始工作。