今日、私は 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] は含まれていません。そのため、独自のクレーム セットを持つ 2 つの異なる ID インスタンスがあります。
Web Api コントローラーのアクション内で同じ手順を実行しようとしましたが、Identity が Identities[0] を参照していました。これは、同じインスタンスがあることを意味します。
OWIN ミドルウェアの Currentprincipal に何が起こっているので、Identity と Identity[0] は異なるインスタンスを参照していますか? 誰か私にこれを説明してもらえますか?
ありがとうございました!