2013-04-08 32 views
9

.NET'te hizmet/istemci iletişimi için adlandırılmış bir yöneltme uygulamak istedim ve this code arasında, borunun sunucu tarafının başlatılması sırasında boru için bir güvenlik tanımlayıcısı oluşturmak zorundaydı. Bunun bu şekilde yaptı: Ben ona bakıyorum.NET'te güvenlik kimliği için yerelleştirme

PipeSecurity pipeSecurity = new PipeSecurity(); 

// Allow Everyone read and write access to the pipe. 
pipeSecurity.SetAccessRule(new PipeAccessRule("Authenticated Users", 
    PipeAccessRights.ReadWrite, AccessControlType.Allow)); 

// Allow the Administrators group full access to the pipe. 
pipeSecurity.SetAccessRule(new PipeAccessRule("Administrators", 
    PipeAccessRights.FullControl, AccessControlType.Allow)); 

Ama, ben dizeleri veya Authenticated Users ve Administrators parçaları gibi SID'leri belirterek endişeleniyorum. Çince veya başka bir dilde mi söyleneceklerinin garantisi nedir? (OP asıl soruya alıntı)

+0

Tamam. Kendimi doğruladım. Çalışıyor gibi görünüyor. – ahmd0

+5

Bunu, uygun bir soru/cevap çiftine bölmeyi düşünmelisiniz. – slugster

+0

Evet, kendi sorunuza cevap verebilirsiniz. – DWright

cevap

0

Bu alternatif ile geldi:

PipeSecurity pipeSecurity = new PipeSecurity(); 

// Allow Everyone read and write access to the pipe. 
pipeSecurity.SetAccessRule(new PipeAccessRule(
    "Authenticated Users", 
    new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null), 
    PipeAccessRights.ReadWrite, AccessControlType.Allow)); 

// Allow the Administrators group full access to the pipe. 
pipeSecurity.SetAccessRule(new PipeAccessRule(
    "Administrators", 
    new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null), 
    PipeAccessRights.FullControl, AccessControlType.Allow)); 
+0

Bu benim için işe yaramıyor, dize ve 'SecurityIdentifier', [https://msdn.microsoft.com/en-us/library/system.io.pipes. pipeaccessrule.pipeaccessrule (v = vs.110) .aspx). Dize değişmezlerini "Kimliği Doğrulanmış Kullanıcılar" ve "Yöneticiler" i kaldırın. – doug65536

2

Sen sid almak için WellKnownSidType enum kullanmak ve IdentityReference içine çevirebilir:

 var sid = new SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, null); 
     var everyone = sid.Translate(typeof(NTAccount)); 
     security.AddAccessRule(new PipeAccessRule(everyone, PipeAccessRights.ReadWrite, AccessControlType.Allow)); 
+1

"Herkes" harika bir fikir değil. Muhtemelen en azından "WellKnownSidType.AuthenticatedUserSid" değerini istiyorsunuz. Paranoya dışındaki WorldSid'i (Herkes) kullanmanın özel bir nedeni var mı? – doug65536

+0

Kesinlikle! Değiştirildi. –

+1

Bilinmeyen güvenlik sorunlarıyla karşılaştığınızda herkes iyi bir fikirdir, bu yüzden kodun çalıştığından emin olmak için bir güvenlik testinden geçmenize izin verir, böylece hangi seviyede güvenlik gerektiğine dalabilirsiniz. – TheLegendaryCopyCoder