2012-12-05 64 views
3

我正在使用C#庫連接到vSphere(VimClient)。我使用這種方法登錄:使用C#API使用SSPI對vSphere進行身份驗證

VimClient client = new VimClient(); 
client.Connect("https://vSphereMachine/sdk"); 
client.Login("userName", "password"); 

我登錄的用戶是當前用戶使用的進程。有沒有一種方法可以使用當前登錄的用戶進行身份驗證?

此線程似乎提供建議,但沒有我想那裏的工作:http://communities.vmware.com/message/1125103

這可能是因爲我不熟悉.NET中的SSPI實現。

回答

0

由於VMWare.Vim.dll只是包裝生成的WCF服務客戶端,我無法適應this sample project直接使用dll。這是我改編的他的LoginBySspiPackage方法。

private UserSession LoginBySspiPackage(SspiPackageType sspiPackage, string serviceSpn) 
    { 
     Log($"Logging in to VSphere instance {VimClient.ServiceUrl} using SSPI."); 
     var sspiClient = new SspiClient(serviceSpn, sspiPackage); 
     var sessionManager = new SessionManager(VimClient, VimClient.ServiceContent.SessionManager); 

     var serverNotReady = true; 
     UserSession session = null; 

     while (serverNotReady) 
     { 
      try 
      { 
       var base64String = Convert.ToBase64String(sspiClient.Token); 
       session = sessionManager.LoginBySSPI(base64String, "en"); 

       serverNotReady = false; // Connected! 
      } 
      catch (VMware.Vim.VimException e) 
      { 
       if (e.MethodFault is SSPIChallenge) 
       { 
        var sspiChallenge = e.MethodFault as SSPIChallenge; 
        var base64String = Convert.FromBase64String(sspiChallenge.Base64Token); 
        sspiClient.Initialize(base64String); 
       } 
       else if (e.MethodFault is InvalidLogin) 
       { 
        throw new InvalidLoginException(e.Message); 
       } 
       else 
       { 
        throw; 
       } 
      } 
     } 

     return session; 
    } 
相關問題