使用C#API使用SSPI对vSphere进行身份验证

我正在使用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;
    }

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...