11

MVC では、これら 2 つの違いは何ですか?

それらは同一に見え、同じタイプ/クラスを返しSystem.Web.Security.RolePrincipalますが、微妙な点があります。

例えば。次のコードは、ClaimsPrincipal.Current によって生成されたインスタンスに対して呼び出されると、さまざまなエラーをスローします。

cp.FindFirst(ClaimTypes.Name); //{"Unable to connect to SQL Server database."} <--HUH!?
cp.Claims; //{"Value cannot be null.\r\nParameter name: username"}

上記は、代わりに cp が次の場合に機能します。

var cp = System.Web.HttpContext.Current.User

クイック ウォッチを使用してプライベート メンバーにドリルダウンすると、両方が同じ Claim ディクショナリを持っていることがわかります。ただし、何らかの理由で、返されたオブジェクトに対して呼び出されると、パブリック プロパティが吹き飛ばされます。ClaimsPrincipal.Current

ヘルプ - なぜこれが!? これは私を夢中にさせています。

=============編集==================

そろそろ寝る時間に違いない。

IPrincipal は複数の ID をサポートしています。なんらかのストアが必要です。IIdentity は ClaimsIdentity のインスタンスを返し、ストアを必要としません。

私は単に間違ったプロパティを掘り下げていました。それらの2つは、形状がほぼ同じです。同じプロパティとメソッドで、私はそれらを混乱させました。

4

1 に答える 1

9

Identity は現在認証されているユーザーであり、プリンシパルはコードが実行されているセキュリティ コンテキストです。

この記事はhttp://msdn.microsoft.com/en-us/library/ftx85f8x.aspxで役に立ったと思う良い説明です。

于 2013-10-29T08:57:19.277 に答える