今天我正在为 Oauth 中间件配置授权提供程序,并尝试将一些 guid 值插入到 Thread.CurrentPrincipal.Identity.Claims 中。但是当我试图调用 Thread.CurrentPrincipal 的 FindFirst 时,我什么都没有。
这是我试图做的例子:
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],这意味着存在相同的实例。
OWIN 中间件的 Currentprincipal 发生了什么,所以它的 Identity 和 Identities[0] 指的是不同的实例?谁能给我解释一下,好吗?
谢谢!