문제

Windows 계정을 사용하여 WCF 서비스를 보호하려고합니다. 서비스는 다른 언어를 가진 많은 시스템에서 실행해야합니다. 언어 독립적 인 역할 이름을 가진 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)을 현지 형식 (SecurityIndifier.Translate를 통해)으로 동적으로 변환 할 수 있습니다.

잘 알려진 SID는 KB 243330에 나열되어 있습니다.

흠, 나는 내 코드에서 직접 그룹 이름을 사용하지 않을 것입니다 (하드 코드). "Helloworldadmin"과 같은 역할로 추상화하고 App.Config에서 역할을 구성하십시오. 이것은 사용자 그룹에 매핑되어야합니다. 이를 통해 사용자 / 관리자는 그룹을 선택하여 역할에 매핑 할 수 있습니다 (예 : 응용 프로그램 관리자가 AD 관리자가 아닌 경우). 살펴보십시오 http://msdn.microsoft.com/en-us/library/ms998314.aspx. HTH.

독일어 시스템에서 "내장 관리자"가 작동하지 않을 것이라고 확신하십니까? 그때 까지도이 기본 그룹 이름은 유효해야한다고 상상했을 것입니다. 예, 관리자 도구에서 "VordeFiniert Administoren"이 표시되지만 PrincipalPermision 속성이 언어에 따라 다르면 놀랄 것입니다.

마크

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top