Сегодня я настраивал поставщика авторизации для промежуточного программного обеспечения 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, поэтому Identity и Identities[0] относятся к разным экземплярам? Может ли кто-нибудь объяснить мне это, пожалуйста?
Благодарю вас!