2

今日、私は 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] は異なるインスタンスを参照していますか? 誰か私にこれを説明してもらえますか?

ありがとうございました!

4

1 に答える 1