gpt4 book ai didi

c# - 使用 C# API 通过 SSPI 向 vSphere 进行身份验证

转载 作者:行者123 更新时间:2023-11-30 12:48:35 24 4
gpt4 key购买 nike

我正在使用 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# - 使用 C# API 通过 SSPI 向 vSphere 进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13728962/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com