小编muk*_*uku的帖子

获取Kerberos服务令牌时遇到问题

我正在尝试使用以下代码获取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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我的问题是provider.GetToken()方法引发SecurityTokenValidationException,并显示消息“提供的NetworkCredentials无法创建Kerberos凭据,有关详细信息,请参见内部异常”。内部异常显示为“不支持对在需要Kerberos多分支的用户帐户下运行的服务进行身份验证”。有什么想法吗?

我从此线程获得了代码,看来在这种情况下它起作用了:如何使用SSPI从Kerberos获取服务令牌

c# authentication kerberos

5
推荐指数
0
解决办法
1649
查看次数

CryptoAPI AcquireContext无法检索密钥容器

我正在将一个旧的VB6应用程序移植到.NET,我从昨天下午开始遇到一些问题,我遇到了一些CryptoAPI调用.

特别是我无法检索已定义的密钥容器.我用的是这个CryptAcquireContext()功能.我在创建容器时使用了一些测试代码.然后,如果我去,C:\Users...\Roaming\Microsoft\Crypto\RSA\Machine Keys\我可以看到用我定义的容器名称创建的文件,所以我假设它已成功创建.

尝试创建相同容器的后续调用验证了该假设,因为我得到了已定义键集的win32错误.

无论如何,在我的下一个代码调用中,我尝试检索已经创建的容器,我得到了Windows错误,没有定义键集.

错误:-2146893799(80090019)未定义键集.

有任何想法吗?

这是一个代码示例:

public const uint PROV_RSA_FULL = 1;
public const uint CRYPT_NEWKEYSET = 0x00000008;
public const uint CRYPT_MACHINE_KEYSET = 0x00000020;
const string MS_DEF_PROV = "Microsoft Base Cryptographic Provider v1.0";

[DllImport("advapi32.dll", SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool CryptAcquireContext(out IntPtr phProv, string pszContainer, string pszProvider, uint dwProvType, uint dwFlags);

public static void CreateContainer()
{
        IntPtr hCryptProv;
        int error;
        if (!CryptAcquireContext(out hCryptProv, "new", MS_DEF_PROV, PROV_RSA_FULL, CRYPT_NEWKEYSET))
        {
            error = Marshal.GetLastWin32Error(); …
Run Code Online (Sandbox Code Playgroud)

.net c# cryptoapi

2
推荐指数
1
解决办法
6141
查看次数

标签 统计

c# ×2

.net ×1

authentication ×1

cryptoapi ×1

kerberos ×1