C# Authorize属性在带有OWIN的Azure上不起作用
我已将在Windows Azure云服务中运行的web应用程序从默认成员资格系统从MVC 4模板迁移到新的基于OWIN的ASP.NET身份提供程序 应用程序严重依赖于角色,由于某种原因,这些角色在升级后已停止在Azure上工作 我的控制器或操作用C# Authorize属性在带有OWIN的Azure上不起作用,c#,azure,asp.net-mvc-5,asp.net-identity,C#,Azure,Asp.net Mvc 5,Asp.net Identity,我已将在Windows Azure云服务中运行的web应用程序从默认成员资格系统从MVC 4模板迁移到新的基于OWIN的ASP.NET身份提供程序 应用程序严重依赖于角色,由于某种原因,这些角色在升级后已停止在Azure上工作 我的控制器或操作用[Authorize]修饰。这很好,除非我指定一个角色[Authorize(Roles=“User.Test”)]并在Azure compute emulator中运行它。现在,我将获得无限重定向到登录页面并返回(我已登录,但由于某些原因它不接受该角色)
[Authorize]
修饰。这很好,除非我指定一个角色[Authorize(Roles=“User.Test”)]
并在Azure compute emulator中运行它。现在,我将获得无限重定向到登录页面并返回(我已登录,但由于某些原因它不接受该角色)。
有趣的是,如果我直接调试/运行web项目(因此不使用Azure emulator),一切都可以正常工作
关于如何让它在Azure上工作,有什么想法吗?我还没有在其他方面有过这种行为,所以这让我有些不知所措
2013年11月26日更新
我在VS2013中发现了与默认MVC5模板类似的行为。有关如何在不使用Azure的情况下重现此问题的步骤,请参见本文。好的,出于某种原因,我使用MyGet的Owin和标识库的预发行版自己造成了整个混乱
删除所有软件包并安装稳定版本修复了我的所有问题。这一个解决了我的问题:
<system.webServer>
<modules>
<remove name="RoleManager" /> <!-- <<<<< -->
您是否已检查Azure中使用的数据库是否在AspNetUserRoles中有正确的行,以及AspNetUsers表中连接到用户的AspNetRoles?Authorize属性和User.IsInRole在比较时区分大小写。@OlavNybø,是的,这都是正确的。@jd4u,我知道这一点。案例完全相同。更改当前用户的角色需要您重新创建ClaimsEntity以处理后续请求。角色检查是根据身份验证过程中填充的ClaimSideEntity.Claims进行的。