我尝试使用以下代码获取Kerberos票证:
public static byte[] GetToken(string username, string password, string domain)
{
using (var domainContext = new PrincipalContext(ContextType.Domain, domain))
{
string spn = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, username).UserPrincipalName;
var provider = new KerberosSecurityTokenProvider(spn, TokenImpersonationLevel.Impersonation, new NetworkCredential(username, password, domain));
var token = provider.GetToken(TimeSpan.FromMinutes(1)) as KerberosRequestorSecurityToken;
return token.GetRequest();
}
}
我的问题是provider.GetToken()方法抛出SecurityTokenValidationException并显示消息"提供的NetworkCredentials无法创建Kerberos凭据,有关详细信息,请参阅内部异常"。内部异常读取"不支持对在需要Kerberos多重标记的用户帐户下运行的服务进行身份验证"。有什么想法吗?
我从这个帖子中得到了我的代码,看起来它适用于这个人的案例:How to get Service Token from Kerberos using SSPI