使用C#API使用SSPI对vSphere进行身份验证
发布时间:2020-12-16 07:02:33 所属栏目:百科 来源:网络整理
导读:我正在使用C#库连接到vSphere(VimClient).我使用这种方法登录: VimClient client = new VimClient();client.Connect("https://vSphereMachine/sdk");client.Login("userName","password"); 我正在登录的用户是进程使用的当前用户.有没有办法可以使用当前登
我正在使用C#库连接到vSphere(VimClient).我使用这种方法登录:
VimClient client = new VimClient(); client.Connect("https://vSphereMachine/sdk"); client.Login("userName","password"); 我正在登录的用户是进程使用的当前用户.有没有办法可以使用当前登录的用户进行身份验证? 这个线程似乎提供了建议,但我在那里尝试的任何工作都没有:http://communities.vmware.com/message/1125103 这可能是因为我不熟悉.NET中的SSPI实现. 解决方法
由于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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |