Asp.net身份+身份不在后续请求中维护

时间:2015-03-23 03:20:51

标签: asp.net-identity identity persistent

我正在尝试在我的网络(MVC5)应用程序中实现Asp.net Identity。在用户身份验证方法中,我正在验证用户,如果用户存在,那么我在我的应用程序中手动创建声明身份和主体(Authentication.cs)。之后,我将Claims Principal分配给当前的HttpContext和Thread。所以现在我能够在同一个请求httpcontext中看到Identity。但是,如果我尝试从不同的操作/页面访问声明标识,那么它将在User.Identity对象中显示空值,即Identity不会在后续请求中维护。

在我的应用程序中,我在web.config中设置AuthenticationMode =“None”,因此我从OWIN Startup类中删除了LoginPath属性。

我不确定我错过了什么,请帮我解决这个问题。

//OWIN startup.cs
[assembly: OwinStartup(typeof(Web.Startup))]
namespace Web
{

public class Startup
{
    public void Configuration(IAppBuilder app)
    {
        // For more information on how to configure your application, 
visit http://go.microsoft.com/fwlink/?LinkID=316888
        app.UseCookieAuthentication(new CookieAuthenticationOptions
        {
            AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
            CookieSecure = CookieSecureOption.Always
        });

    }
}
}


//Authentication.cs
//After user authentication, setting Thread and http context.
if (user != null)
{
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;

var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, "username"));
claims.Add(new Claim(ClaimTypes.Email, "username@gmail.com"));
var userIdentity = new ClaimsIdentity(claims, DefaultAuthenticationTypes.ApplicationCookie);

ClaimsPrincipal principal2 = new ClaimsPrincipal(userIdentity);

authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = false }, userIdentity);

var test = HttpContext.Current.User.Identity.IsAuthenticated; //return false


HttpContext.Current.User = principal2;

test = userIdentity.IsAuthenticated; // User Identity is authenticated return true
System.Threading.Thread.CurrentPrincipal = principal2;
test = HttpContext.Current.User.Identity.IsAuthenticated; //return true

}

但是,如果我重定向到不同的页面/操作,则User.Identity.IsAuthenticated中的值显示为false。

由于 塞尔瓦库玛

1 个答案:

答案 0 :(得分:0)

IsPersistent属性专门用于determining whether to persist authentication across multiple requests。将其设置为true