2017-10-09 11 views
1

J'ai cette fonction qui crée un groupe d'échange de distribution (cette fonction fonctionne bien):Accès refusé au shell d'échange quand j'usurper l'identité d'

private void createDistributionGroup() 
{ 
     System.Security.SecureString pass = new System.Security.SecureString(); 
     foreach (char c in password) 
      pass.AppendChar(c); 
     PSCredential cred = new PSCredential(username, pass); 

     WSManConnectionInfo connection = new WSManConnectionInfo(new Uri("http://[my_exchange].[my_domain].com/PowerShell/"), "Microsoft.Exchange", cred); 
     connection.AuthenticationMechanism = AuthenticationMechanism.Default; 

     Runspace runspace = RunspaceFactory.CreateRunspace(connection); 
     PowerShell ps = PowerShell.Create(); 

     try 
     { 
      runspace.Open(); 
      ps.Runspace = runspace; 
      ps.AddCommand("New-DistributionGroup").AddParameter("Name", "GRP_DIF_" + textBox1.Text)); 
      ps.Invoke(); 
     } 
     finally 
     { 
      runspace.Dispose(); 
      runspace = null; 
      ps.Dispose(); 
      ps = null; 
     } 
    } 

Je dois exécuter mon application avec usurpation d'identité, en utilisant the msdn example j'usurper l'identité d'un compte de service (l'exemple MSDN fonctionne bien et emprunte l'identité avec succès).

Avant d'implémenter l'usurpation d'identité la connexion fonctionne, puisque je fais l'usurpation d'identité lorsque je tente d'exécuter la fonction createDistributionGroup() je reçois une erreur:

Access Denied : About remote troubleshooting

J'ai immédiatement testé pour ouvrir la session PowerShell distante dans une PowerShell locale à l'aide

$credential = Get-Credential 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://[my_exchange].[my_domain].com/PowerShell/ -Authentication Default -Credential $credential 
Import-PSSession $Session 

Et la session a été ouverte avec succès ...

  • J'ai testé pour changer l'autorisation de compte de service (même admin de domaine il a été refusé ...): aucun effet
  • Je donne un accès spécial sur le serveur d'échange (groupe d'administration locale, ...): aucun effet
  • je donne les promos IIS autorisations (frontend, back-end, ...): pas d'effet

Pourquoi quand j'usurper l'identité du compte est refusé et comment accorder l'accès?

Répondre

1

L'emprunt d'identité ne fonctionne pas pour l'authentification à distance. À ce stade, le processus local ne peut pas prouver au processus distant qu'il s'agit bien du client d'origine (ce qui est bien, car ce n'est pas le cas). Lorsque vous vous connectez avec les informations d'identification fournies dans Get-Credential, le mot de passe réel est présent et disponible, l'authentification fonctionne donc. Donc, il s'agit essentiellement d'un problème de double saut de kerberos, mais pas celui que les gens rencontrent habituellement.

Si vous devez utiliser l'emprunt d'identité, vous devrez vous ré-authentifier sur l'ordinateur distant.

Un moyen possible, ce qui n'est pas nécessairement une bonne idée, consiste à stocker les informations d'identification dans un fichier chiffré, auquel le compte que vous empruntez doit accéder. Je suis en fait pas 100% sûr que cela va travailler avec l'usurpation d'identité, mais il pourrait être la peine d'essayer:

En premier lieu, stocker vos informations d'identification crypté (exécuter ce que l'utilisateur à personnifier):

$cred = Get-Credential 
$cred | Export-Clixml -Path "C:\Creds\appcred_${env:USERNAME}_${env:COMPUTERNAME}.xml" 

En votre code d'application, après usurpation d'identité:

$cred = Import-Clixml -Path "C:\Creds\appcred_${env:USERNAME}_${env:COMPUTERNAME}.xml" 
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://[my_exchange].[my_domain].com/PowerShell/ -Authentication Default -Credential $cred 

Cette séquence fonctionne généralement. Le mot de passe du credetial dans le fichier XML est crypté à l'aide de l'API DPAPI (Windows Data Protection API) avec une clé liée à l'utilisateur et à l'ordinateur, de sorte qu'il ne peut être décrypté que par le même utilisateur.

Comme je l'ai dit je ne sais pas si cela fonctionnerait avec l'emprunt d'identité ou non.Cela signifie également que le fichier doit être mis à jour manuellement si vous modifiez le mot de passe du compte dans AD.

+0

Finaly Je ne personnifie pas cette fonction, la manière la plus simple est d'appeler cette fonction après une usurpation d'identité. merci pour vos explications! –