Днес конфигурирах доставчик на оторизация за Oauth междинен софтуер и се опитвах да вмъкна някаква guid стойност в Thread.CurrentPrincipal.Identity.Claims. Но когато се опитах да извикам FindFirst на Thread.CurrentPrincipal, нямам нищо.
Ето примера, който се опитвах да направя:
public override Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var claimsIdentity = Thread.CurrentPrincipal.Identity as ClaimsIdentity;
if (claimsIdentity != null)
claimsIdentity.AddClaim(new Claim("TestClaim", Guid.NewGuid().ToString()));
var claimValue = ((ClaimsPrincipal)Thread.CurrentPrincipal)
.FindFirst(x => x.Type == "TestClaim"); //claimValue == null!
}
Проверката на вътрешните свойства установи, че Thread.CurrentPrincipal.Identity все още съдържа претенция, която съм задал преди, но Thread.CurrentPrincipal.Identities[0] - не. Така че има два различни екземпляра на идентичност със собствен набор от претенции.
Опитах се да направя същите стъпки в действието на контролера на Web Api и там Identity препращаше към Identities[0], което означава, че има същия екземпляр.
Какво се случва с Currentprincipal на мидълуера на OWIN, така че неговата идентичност и самоличностите [0] се отнасят за различни екземпляри? Може ли някой да ми обясни това, моля?
Благодаря ти!