Identity.IsAuthenticated在azure上始终为true

时间:2015-04-20 10:43:18

标签: asp.net-mvc-4

我目前正在开发一个带有ASP.net MVC框架的网站,以供我自己娱乐,我决定 停止使用本地数据库并使用它的关联数据库在azure上发布我的Web应用程序。 现在我有一个奇怪的身份验证问题。 Identity.IsAuthenticated始终是真的。 起初我得到以下错误:

  

提供的ClaimsIdentity中没有“http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier”或“http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider”类型的声明。要使用基于声明的身份验证启用防伪令牌支持,请验证配置的声明提供程序是否在其生成的ClaimsIdentity实例上提供这两个声明。如果配置的声明提供程序使用不同的声明类型作为唯一标识符,则可以通过设置静态属性AntiForgeryConfig.UniqueClaimTypeIdentifier来配置它。

在没有太多了解的情况下,我找到了一个在global.cs文件中配置AntiForgery令牌的解决方案

AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.Name;

在错误停止显示的时刻,但AspNetUsers表中不存在标识的用户。当然,当我尝试在需要验证的部分中从用户获取信息时,应用程序崩溃,因为没有条目存在。

在我的布局上,如果用户经过身份验证,我会有一段代码来显示一些数据

@if (User.Identity.IsAuthenticated)
{
    using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
    {
        @Html.AntiForgeryToken()

        <ul class="nav navbar-nav navbar-right">
            <li>
                @Html.ActionLink("Hello " + User.Identity.GetUserName() + "!", "Index", "Manage", routeValues: null, htmlAttributes: new { title = "Manage" })
            </li>
            <li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
        </ul>
    }
}

User.Identity.GetUserName()总是返回live.com#[MyAzureAccount] @ outlook.com,我无法注销。

这似乎是一个身份问题,但由于我没有触及启动项目时生成的代码,因为它在本地工作,我希望它可以工作。

1 个答案:

答案 0 :(得分:0)

解决方案只是从azure下载发布文件,而不是手工填写要发布的字段。我不知道它为什么会起作用,但它解决了这个问题。