2017-10-18 5 views
1

Question、プリンシパルのプリンシパルを作成してプリンシパルのアカウントに対して権限を与える方法

PrincipalPermissionでDemandを呼び出すと、Principalオブジェクトのデータに対して権限を与えるPrincipalPermissionオブジェクトを作成するにはどうすればよいですか?

なぜそして何を試してみました...

を私は「jlaird」などのユーザーアカウント名を反映して、ユーザ入力によって提供されるアカウントの文字列を格納します。誰かがWindowsサービスを使用しようとすると、WCFインターフェイス経由で誰が呼び出しているかに基づいてアクセスを許可します。

私は提供された文字列を受け取り、そこからSystem.DirectoryServices.AccountManagement.Principalオブジェクトを構築します。この方法:私はSystem.Security.PrincipalPermission.Demand(呼び出すときに

System.Security.PrincipalPermission permPP = null; 
permPP = new PrincipalPermission(userP.UserPrincipalName, null); 

)と例外を待つ(かどうか:

System.DirectoryServices.AccountManagement.Principal userP = null; 
userP = System.DirectoryServices.AccountManagement.Principal.FindByIdentity(new PrincipalContext(ContextType.Domain), "jlaird"); 

は、その後、私はSystem.Security.PrincipalPermissionをこのように構築)このようなWindowsサービス呼び出しているユーザー認証するために:デバッグすることで

permPP.Demand() 

を、私は両方の文字列「jlaird」と同じアカウントに「MYDOMAINの\のjlaird」ポイントをtで表すことが検証しました彼はプリンシパルオブジェクトです。どちらの場合も、PrincipalオブジェクトのUserPrincipalNameは '[email protected]'です。

userP.UserPrincipalNameから作成した場合でも、PrincipalPermissionの要求が例外をスローします。実際には、それだけのような新しいPrincipalPermissionに「MYDOMAIN \のjlaird」ユーザーを許可し、私は、文字列を渡すときに例外をスローしません:まだ

new PrincipalPermission("MYDOMAIN\jlaird", null); 

、これは例外をスローします:

new PrincipalPermission("[email protected]") 

"MYDOMAIN \ jlaird"と "jlaird"が許可して要求を出して例外をスローしないように、Principalオブジェクトからのデータに対して権限を与えるPrincipalPermissionオブジェクトを作成するにはどうすればよいですか?

答えて

0

OK。解決策を見つけました。

System.Security.Principal.WindowsIdentity wIdent = null; 
wIdent = new System.Security.Principal.WindowsIdentity(userP.UserPrincipalName); 
System.Security.PrincipalPermission permPP = null; 
permPP = new PrincipalPermission(wIdent.Name, null); 

PrincipalPermission(string、string)は、最初の引数がヒントであったIPrincipal名であると想定しています。 WindowsIdentityはそのインターフェイスを実装します。したがって、私のドメイン上の 'jlaird'と 'MYDOMAIN \ jlaird'は両方とも、 'MyDOMAIN \ jlaird'に解決され、PrinicipalPermission.Demandが幸せになります。

関連する問題