Вопрос

Я пытаюсь защитить службу WCF с помощью учетных записей Windows.Служба должна работать во многих системах с разными языками.Как я могу установить PrincipalPermission, у которого имена ролей не зависят от языка?

Я нашел уродливые обходные пути, подобные этому.

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

Я не думаю, что это хорошее решение, есть ли какой-нибудь способ сделать этот язык независимым?Есть ли способ использовать SID учетной записи вместо строки?

Это было полезно?

Решение

Еще одна попытка:Взгляните на http://msdn.microsoft.com/en-us/library/system.security.principal.windowsbuiltinrole.aspx ....и переходим к образцу .Там вы можете использовать встроенные элементы перечисления, чтобы получить правильно написанное имя группы (через API)...тогда оно должно быть нейтральным по отношению к языку.

HTH, Томас

Другие советы

Вы можете свернуть свой собственный атрибут разрешения, который обрабатывает перевод:

 [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);
    }
 }

Обратите внимание, что это потребует дополнительных усилий по развертыванию (gac, caspol и т. д.).

Вы можете использовать императивную версию и динамически преобразовывать нейтральную для языка форму (например, SID) в локализованную форму (может быть через SecurityIdentifier.Translate).

Хорошо известные идентификаторы безопасности перечислены в KB 243330.

Хм, я бы не использовал имя группы непосредственно в своем коде (жестко закодировано). Попробуйте абстрагироваться от такой роли, как " HelloWorldAdmin " и иметь роль, настроенную в app.config. Этот должен быть сопоставлен с группой пользователей. Это позволит вашим пользователям / администраторам выбрать группу и сопоставить ее с ролью (например, в случае, если администраторы приложения не являются администраторами AD). Посмотрите на http://msdn.microsoft.com/en-us/ библиотека / ms998314.aspx . НТН.

Вы абсолютно уверены, что в немецкоязычной системе "BUILTIN \Administrators" не будет работать?Я бы предположил, что даже тогда эти основные названия групп должны быть действительными.Да, в ваших инструментах администрирования он покажет "Vordefiniert \ ADministratoren" - но я был бы удивлен, если атрибут PrincipalPermission будет зависеть от языка.

Марк

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top