2009-06-24 10 views
1

私はAdministratorsグループのすべてのユーザーがWCFを介してアクセスできるようにしようとしています。WCF Claim/SecurityIdentifier(SID)のWindowsIdentityまたはWindowsPrincipalを取得するにはどうすればよいですか?

internal sealed class AuthorizationManager : ServiceAuthorizationManager 
{ 
    public override bool CheckAccess(OperationContext operationContext) 
    { 
     base.CheckAccess(operationContext); 

     ReadOnlyCollection<ClaimSet> claimSets = operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets; 
     ClaimSet claimSet = claimSets[0]; 

     foreach (var claim in claimSet.FindClaims(ClaimTypes.Sid, Rights.Identity)) 
     { 
      SecurityIdentifier sid = (SecurityIdentifier)claim.Resource; 
      NTAccount ntAccount = (NTAccount)sid.Translate(typeof(NTAccount)); 

      //This line throws an error. How can i convert a SecurityIdentifier to a WindowsIdentity? 
      WindowsIdentity user = new WindowsIdentity(ntAccount.Value); 

      WindowsPrincipal principal = new WindowsPrincipal(user); 
      return principal.IsInRole(WindowsBuiltInRole.Administrator); 
     } 
    } 
} 

答えて

3

あなたは認証する必要があります。アカウントを識別する識別子があります。アカウント名はSID:S-1-5-domain-500 < => DOMAIN \ Administratorのアカウント名と同形です。 WindowsIdentityは、認証されたユーザーです。

これは、取得しようとしているユーザーが既に認証されており、アカウントID(SID)の申し立てを提供していると思います。

1

JPが正しいです。提供される主張には、ユーザーが所属するすべてのユーザーグループのSIDが含まれます。ここに私たちの解決策があります。

internal sealed class AuthorizationManager : ServiceAuthorizationManager 
{ 
    public override bool CheckAccess(OperationContext operationContext) 
    { 
     base.CheckAccess(operationContext); 

     ReadOnlyCollection<ClaimSet> claimSets = operationContext.ServiceSecurityContext.AuthorizationContext.ClaimSets; 
     ClaimSet claimSet = claimSets[0]; 

      //is this a member of the local admins group 
      SecurityIdentifier adminsSid = new SecurityIdentifier("S-1-5-32-544"); 
      foreach (var claim in claimSet.FindClaims(ClaimTypes.Sid, Rights.PossessProperty)) 
      { 
       if (adminsSid.Equals(claim.Resource)) 
       { 
        return true; 
       } 
      } 
    } 
} 
関連する問題