다중 언어 원금 역할 이름을 설정하는 방법은 무엇입니까?
-
03-07-2019 - |
문제
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 속성이 언어에 따라 다르면 놀랄 것입니다.
마크