Visual Studio 2012中由默认(互联网)模板创建的MVC 4应用程序在运行“身份和访问...”向导后返回RolePrincipal。

该向导会与STS(实时或“开发”时间STS)创建信任关系。

如果选中,则User对象的类型为RolePrincipal。这样的结果是User.IsInRole针对本地角色数据库而不是声明集进行解析。



我期待一个ClaimsPrincipal

最佳答案

这是因为有了新的Oauth支持。它使用的是新的simplemembership,其下面使用了所有提供程序。

删除帐户控制器上的[InitializeSimpleMembership]属性是不够的,因为初始化发生在WebMatrix.WebData程序集中:

[assembly: PreApplicationStartMethod(typeof (PreApplicationStartCode), "Start")]


PreApplicationStartCode.Start最终调用:

WebSecurity.PreAppStartInit();


如果检查,则表明:

     ...
SimpleRoleProvider simpleRoleProvider = WebSecurity.CreateDefaultSimpleRoleProvider("AspNetSqlRoleProvider", currentDefault2);
      Roles.Providers.Remove("AspNetSqlRoleProvider");
      Roles.Providers.Add((ProviderBase) simpleRoleProvider);
...


禁用所有这些“魔术”的方法是使用web.config中的此设置:

<add key="enableSimpleMembership" value="false"/>

09-05 23:41