web-dev-qa-db-ja.com

.NETのプリンシパルとは何ですか?

.NETでのアイデンティティについて話すとき、私たちは プリンシパル という考えを持っています。インターフェースがあります IPrincipal そしてそれと一緒に実装 ClaimsPrincipalThread.CurrentPrincipal を使用して、いつでもそのインターフェイスの実装の1つのインスタンスにアクセスできます。

今、私はこのプリンシパルが実際に何であるかを理解していませんでした。確かに、最初はそれが現在のユーザーのアイデンティティを表すものだと思いました。しかし、実際にはそうではありません IIdentity 実装と一緒に ClaimsIdentity そのために。少し検索すると、MSDNで次のことがわかりました。

プリンシパルオブジェクトは、コードが実行されているユーザーのセキュリティコンテキストを表します。これには、ユーザーのID(IIdentity)やユーザーが属するロールが含まれます。

しかし、これはコードを実行しているユーザーのセキュリティコンテキストは実際にはどういう意味ですか?これが何を表しているのかまだわからなかったと思います。

35
user1620696

リソースへのアクセスまたはコードを実行する機能を承認する場合、アクションを承認しているユーザーを知るだけでなく、どのユーザーがアクションを承認しているかを知るだけで十分です。

これは、シェルを昇格する場合とほぼ同等であると考えてください。プリンシパルのIDが同じ(ユーザーアカウント)であっても、シェルは別のプリンシパル(より多くの特権)で実行されます。

IIdentityタイプは、authenticationの問題に焦点を当てています。つまり、システムに認識されているIDが、そのIDの下で動作したいエージェントに実際に属していることを確認します。これは何かを承認するために必要な前提条件ですが、すべてではありません。

19
Asad Saeeduddin

プリンシパルは、IDとロールをカプセル化する抽象的なものであり、したがって、コードが実行されているセキュリティコンテキストです。これは、Windows ID(つまり、WindowsまたはActive Directoryユーザーアカウント)とWindows「ロール」(別名「グループ」)の場合もあれば、Windowsユーザーとロールから独立しているが、複数のユーザーで引き続き使用できるID /ロールの場合もあります。アプリケーション。第3に、アプリケーション内でのみ定義されるIDとロールのカスタム概念にすることもできます。

セキュリティコンテキストは静的なものではありません。プリンシパルの役割を調整し、セキュリティコンテキストで実行されているID(​​ユーザー)とアプリケーションに与える特権を増減することで変更できます。

これについてさらに学ぶために始めるのに適した場所は次のとおりです。 https://msdn.Microsoft.com/en-us/library/z164t8hs.aspx

10
rory.ap

説明によると、プリンシパルはアイデンティティと役割です。

それは実際には同じくらい単純なものです

public interface IPrincipal 
{
    IIdentity Identity { get; }
    bool IsInRole( string role );
}

それを抽象化するというアイデアは非常に重要でした。当初は実装がほとんどありませんでしたが(WindowsPrincipalRolePrincipalGenericPrincipalを含む)、後で他の実装が導入されました(たとえば、ClaimsPrincipal)。また、レガシーコードの多くは、他に何も変更することなく、すべての利点を備えた新しい実装にシームレスにアップグレードできます。

5
Wiktor Zychla

プリンシパルは、ユーザーのIDと役割を表し、ユーザーに代わって動作します。

ソース: https://docs.Microsoft.com/en-us/dotnet/standard/security/key-security-concepts

0
Catalyst