2009-05-04 17 views
6

Windows hesaplarını kullanarak bir WCF hizmetini güvenli hale getirmeye çalışıyorum. Servis farklı dillerde birçok sistemde çalışmalıdır. Dil bağımsız rol adlarına sahip bir PrincipalPermission nasıl kurabilirim?Çok dilli bir PrincipalPermission rol adı nasıl belirlenir?

Bunun gibi çirkin geçici çözümler buldum.

[PrincipalPermission(SecurityAction.Demand, Role = "Builtin\\Administrators")] // English 
[PrincipalPermission(SecurityAction.Demand, Role = "Vordefiniert\\Administratoren")] // German 
public string HelloWorld() 
{ 
    return "Hello"; 
} 

Bunun iyi bir çözüm olduğunu düşünmüyorum, bu dili bağımsız hale getirmenin bir yolu var mı? Bir string yerine SID hesabını kullanmanın bir yolu var mı?

cevap

0

Hmmmm, Kodumda doğrudan bir grup adı kullanmaz (kodlanmış). "HelloWorldAdmin" gibi bir rolle özetlemeye çalışın ve app.config dosyasında yapılandırılmış bir rolünüz var. Bu bir kullanıcı grubuna eşlenmelidir. Bu, kullanıcılarınızın/yöneticilerinizin bir grup seçmesine ve rolle eşlemesine izin verir (ör. Uygulama yöneticilerinin size AD yöneticisi olmadığında). http://msdn.microsoft.com/en-us/library/ms998314.aspx'a bir göz atın. HTH.

0

Almanca dilinde bir sistemde "BUILTIN \ Administrators" ın çalışmayacağından kesinlikle emin misiniz? O zaman bile hayal ederdim, bu temel grup isimleri geçerli olmalı. Evet, yönetici araçlarınızda, "Vordefiniert \ ADministratoren" gösterecektir - ancak PrincipalPermission özniteliğinin dile bağlı olması durumunda şaşırırdım.

Marc

+1

Hayır, çalışmıyor, ana mantık WindowsPrincipal.IsInRole (dize) yöntemindedir. Reflektörle baktım ve rol isimlerinin herhangi bir "çevirisini" bulamadım. sadece kendiniz deneyin: WindowsPrincipal principal = new WindowsPrincipal (WindowsIdentity.GetCurrent()); bool english = principal.IsInRole ("Yerleşik \\ Yöneticiler"); bool german = principal.IsInRole ("Vordefiniert \\ Administratoren"); Ben senin kadar şaşırdım, bir şey eksik olabilir olabilir ... –

+1

Şaşkın ve sersemlemiş ..... sowas aupp deppertes auch! Die Spinnen, Microsofties ölür :-) –

+0

@marc_s: Geçmişte, bu da beni yakaladı - LDAP ve yazma yükleyicilerini senkronize ederken. –

1

Sen şart sürümünü kullanın ve dinamik (SecurityIdentifier.Translate aracılığıyla olabilir) lokalize forma bir dil nötr formunu (örn SID) dönüştürebilir.

Eh bilinen Sıd'ler KB listelenen 243330.

3

Sen çevirisini kolları kendi izni özelliğini rulo olabilir:

[Serializable, AttributeUsage(AttributeTargets.Method | AttributeTargets.Class, AllowMultiple = true, Inherited = false), ComVisible(true)] 
public sealed class AdministratorPrincipalPermissionAttribute : CodeAccessSecurityAttribute 
{ 
    public AdministratorPrincipalPermissionAttribute(SecurityAction action) : base(action) 
    { } 

    public override IPermission CreatePermission() 
    { 
     var identifier = new SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, null); 
     var role = identifier.Translate(typeof(NTAccount)).Value; 
     return new PrincipalPermission(null, role); 
    } 
} 

bu (gak, caspol bazı ekstra dağıtım çaba gerektirecektir unutmayınız vb.).

İlgili konular