搜狐首页 科技 欢乐颂2

手机搜狐

SOHU.COM

AspNet Identity 和 Owin 谁是谁

最近我发现.提问者问:为什么在调用AuthenticationManager.SignIn后,claim仍然可以被添加到Identity并持久化到cookie里.

示例代码如下所示:

ClaimsIdentityidentity=UserManager.CreateIdentity(user,

DefaultAuthenticationTypes.ApplicationCookie );

varclaim1 = newClaim(ClaimTypes.Country, "Arctica");identity.AddClaim(claim1);AuthenticationManager.SignIn( newAuthenticationProperties

{ IsPersistent = true}, identity );

varclaim2 = newClaim(ClaimTypes.Country, "Antartica");identity.AddClaim(claim2);

是的,为什么claim2在cookie已经设置完成后还可用.

在深入研究后,我发现AspNet Identity框架不设置cookie,而OWIN会设置,OWIN是的一部分.有源码可用是一件好事--你可以发现为什么事情有或没有按你预期的方式工作.

在这个案例里,我花了一些时间探索Katana项目和 工作方式.结果证明SignIn方法不设置cookie.它把Identity对象保存在内存里,直到设置响应cookies的时刻到来,然后claims被转化为一个cookie,所有的事情就这样魔法般地工作着 -)

结果证明Identity框架只处理user持久化,密码哈希,验证密码是否正确,发送密码重置邮件,等等.但是Identity实际上不验证users或创建cookies.而Cookies是被OWIN处理的.

看一下登录的代码:

publicasyncTask SignInAsync(Microsoft.Owin.Security.IAuthenticationManager

authenticationManager, ApplicationUser applicationUser, boolisPersistent){ authenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie); ClaimsIdentity identity = awaitUserManager.CreateIdentityAsync(applicationUser,

精选