var user = UserManager.Find(...);
ClaimsIdentity identity = UserManager.CreateIdentity(
user, DefaultAuthenticationTypes.ApplicationCookie );
var claim1 = new Claim(
ClaimType = ClaimTypes.Country, ClaimValue = "Arctica", UserId = user.Id );
identity.AddClaim(claim1);
AuthenticationManager.SignIn(
new AuthenticationProperties { IsPersistent = true }, identity );
var claim2 = new Claim(
ClaimType = ClaimTypes.Country, ClaimValue = "Antartica", UserId = user.Id );
identity.AddClaim(claim2);
Оба claim1
и claim2
сохраняются во всех запросах только за время ClaimsIdentity
, пользователь зарегистрирован. Другими словами, когда пользователь выходит из системы, вызывая SignOut()
, две заявки также удаляются, и в этом случае следующий пользователь регистрируется > , он больше не является членом этих двух претензий (я предполагаю, что две претензии больше не существуют)
Тот факт, что claim2
сохраняется в разных запросах (даже если cookie проверки подлинности уже был создан при добавлении claim2
к пользователю), предполагает, что утверждает t сохраняется в запросах через cookie аутентификации, но с помощью некоторых других средств.
Итак, как претензии сохраняются в запросах?
EDIT:
1) Насколько я могу судить, утверждения типа IdentityUserClaim
никогда не сохраняются в cookie?
var user = UserManager.Find(...);
/* claim1 won't get persisted in a cookie */
var claim1 = new IdentityUserClaim
{ ClaimType = ClaimTypes.Country, ClaimValue = "Arctica", UserId = user.Id };
user.Claims.Add(claim1);
ClaimsIdentity identity = UserManager.CreateIdentity(
user, DefaultAuthenticationTypes.ApplicationCookie );
AuthenticationManager.SignIn(
new AuthenticationProperties { IsPersistent = true }, identity );
Если мое предположение верно, причина, по которой экземпляры IdentityUserClaim
не сохраняются в cookie, поскольку предполагается, что эти требования должны храниться в DB и, как таковой, в последующих запросах можно получить из DB, в то время как претензии типа Claim
обычно не сохраняются в DB и почему они должны быть сохранены в cookie?
2)
Если вы хотите получить более глубокий вид, как все это работает, ознакомьтесь с исходный код проекта Katana
Я думал, что Asp.net Identity 2 не входит в проект Katana (а именно, я видел, как люди спрашивали, когда Microsoft выпустит исходный код для Identity Asp.Net, хотя исходный код Катаны уже доступен)?!
Благодарю вас