我正在尝试在我的网络(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。
由于 塞尔瓦库玛
答案 0 :(得分:0)
IsPersistent
属性专门用于determining whether to persist authentication across multiple requests。将其设置为true
。