Sitecore - 角色提供者的切换提供者不尊重域
Sitecore - Switching Provider for Role Provider not respecting domain
我们有多个站点 运行 来自一个 sitecore 实例。其中一个站点要求通过外部后端系统管理用户和角色,因此,我们为每个站点配置了自定义成员资格和角色提供程序以及域。但是,由于某种原因,角色提供者上的切换器似乎没有得到尊重。如果我以 sitecore 用户身份登录 CMS,它仍然会调用我的自定义角色提供程序来尝试为该用户获取角色,尽管角色提供程序是针对不同的域配置的?
角色提供程序在实际用户登录站点时工作正常,但在 CMS 用户编辑页面等时不应受到影响。
配置在我们的 Web.config:
<roleManager defaultProvider="sitecore" enabled="true" cookieRequireSSL="false" createPersistentCookie="false" cookieSlidingExpiration="true" cacheRolesInCookie="false">
<providers>
<clear />
<add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="switcher" raiseEvents="true" />
<add name="sql" type="System.Web.Security.SqlRoleProvider" connectionStringName="core" applicationName="sitecore" />
<add name="MyProvider" type="MyApp.Web.Infrastructure.Security.RoleProviders.MyProvider, MyApp.Web" applicationName="sitecore" />
<add name="switcher" type="Sitecore.Security.SwitchingRoleProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/roleManager" />
</providers>
</roleManager>
加上我们在 sitecore 配置中的补丁:
<switchingProviders>
<roleManager>
<provider providerName="MyProvider" storeFullNames="false" wildcard="%" domains="mydomain" patch:after="provider[@providerName='sql']"/>
</roleManager>
</switchingProviders>
这似乎是 quirk/bug Sitecore。当您使用 SwitchingRoleProvider 时,域 属性 将被忽略,并在所有域中调用已实现的提供程序。
使用此角色提供程序时添加了 2 个未记录的属性:
ignoredUserDomains - 提供者不会应用的域的逗号分隔列表。
和
allowedUserDomains - 以逗号分隔的域列表,提供商 将仅 应用到这些域。
您只能为角色提供者指定其中之一,同时提供两者将抛出异常。
在您使用的示例中,以下应该可以解决您的问题:
<switchingProviders>
<roleManager>
<provider providerName="MyProvider" storeFullNames="false" wildcard="%" allowedUserDomains="mydomain" patch:after="provider[@providerName='sql']"/>
</roleManager>
</switchingProviders>
(source)
我们有多个站点 运行 来自一个 sitecore 实例。其中一个站点要求通过外部后端系统管理用户和角色,因此,我们为每个站点配置了自定义成员资格和角色提供程序以及域。但是,由于某种原因,角色提供者上的切换器似乎没有得到尊重。如果我以 sitecore 用户身份登录 CMS,它仍然会调用我的自定义角色提供程序来尝试为该用户获取角色,尽管角色提供程序是针对不同的域配置的?
角色提供程序在实际用户登录站点时工作正常,但在 CMS 用户编辑页面等时不应受到影响。
配置在我们的 Web.config:
<roleManager defaultProvider="sitecore" enabled="true" cookieRequireSSL="false" createPersistentCookie="false" cookieSlidingExpiration="true" cacheRolesInCookie="false">
<providers>
<clear />
<add name="sitecore" type="Sitecore.Security.SitecoreRoleProvider, Sitecore.Kernel" realProviderName="switcher" raiseEvents="true" />
<add name="sql" type="System.Web.Security.SqlRoleProvider" connectionStringName="core" applicationName="sitecore" />
<add name="MyProvider" type="MyApp.Web.Infrastructure.Security.RoleProviders.MyProvider, MyApp.Web" applicationName="sitecore" />
<add name="switcher" type="Sitecore.Security.SwitchingRoleProvider, Sitecore.Kernel" applicationName="sitecore" mappings="switchingProviders/roleManager" />
</providers>
</roleManager>
加上我们在 sitecore 配置中的补丁:
<switchingProviders>
<roleManager>
<provider providerName="MyProvider" storeFullNames="false" wildcard="%" domains="mydomain" patch:after="provider[@providerName='sql']"/>
</roleManager>
</switchingProviders>
这似乎是 quirk/bug Sitecore。当您使用 SwitchingRoleProvider 时,域 属性 将被忽略,并在所有域中调用已实现的提供程序。
使用此角色提供程序时添加了 2 个未记录的属性:
ignoredUserDomains - 提供者不会应用的域的逗号分隔列表。
和
allowedUserDomains - 以逗号分隔的域列表,提供商 将仅 应用到这些域。
您只能为角色提供者指定其中之一,同时提供两者将抛出异常。
在您使用的示例中,以下应该可以解决您的问题:
<switchingProviders>
<roleManager>
<provider providerName="MyProvider" storeFullNames="false" wildcard="%" allowedUserDomains="mydomain" patch:after="provider[@providerName='sql']"/>
</roleManager>
</switchingProviders>
(source)