ASP.NET标识:具有角色的Authorize属性在Azure上不起作用

时间:2014-05-29 19:03:57

标签: asp.net asp.net-mvc azure asp.net-identity

我刚刚在Azure上发布了我的新ASP.NET MVC网站,其中包含Identity和OWIN授权。前端工作得很好,但后端有问题。我在管理员控制器中使用[Authorize]属性来检查用户是否具有访问它的必需角色,如下所示:

[Authorize(Roles = "Admin")]

在localhost上,即使使用远程Azure SQL数据库也可以。 但是在Azure上,任何具有authorize属性且带有角色的控制器都会加载几分钟然后抛出:

  

建立与SQL Server的连接时发生与网络相关或特定于实例的错误。服务器未找到或无法访问。验证实例名称是否正确,以及SQL Server是否配置为允许远程连接。 (提供程序:SQL网络接口,错误:26 - 查找指定的服务器/实例时出错)

没有角色的授权属性可以正常工作。

3 个答案:

答案 0 :(得分:15)

将此代码添加到web.config可以解决问题。

<system.webServer>
    <modules>
        <remove name="RoleManager" />
    </modules>
</system.webServer>

我知道现在已经很晚了,但我有一个真正的答案。无论如何我还是想分享它,因为我自己就浪费了几个小时。

this post

找到的信息

答案 1 :(得分:1)

没有真正解决Azure问题,最终编写了我自己的授权属性。问题似乎出现在User.IsInRole()方法中,所以请避免使用它。

答案 2 :(得分:0)

我遇到了类似的问题,因为我使用的是旧形式的身份:<rolemanager>。如果您使用的是asp.net身份2,那么您希望禁用<rolemanager>(默认情况下也是如此 - 即在您的web.config中没有引用它)。