【问题标题】:how to configure the AcquireCredentialsHandleA correctly如何正确配置 AcquireCredentialsHandleA
【发布时间】:2019-08-16 16:12:07
【问题描述】:

我正在尝试设置一个 Windows SSPI 程序来读取当前用户的身份验证 (https://docs.microsoft.com/en-us/windows/win32/api/sspi/nf-sspi-acquirecredentialshandlea)。

奇怪的是它不起作用并给我一个错误。

//ERROR DETAILS
// MessageId: SEC_E_INVALID_TOKEN
//
// MessageText:
//
// The token supplied to the function is invalid
//
#define SEC_E_INVALID_TOKEN HRESULT_TYPEDEF(0x80090308L)

我想出的代码如下。

    // Create an SSPI credential.
    Status = g_pSSPI->AcquireCredentialsHandleA(
    pN,                   // Name of principal          
    ppPackageInfo[2].Name,//sec_package_name.c_str,         
    SECPKG_CRED_OUTBOUND, // Flags indicating use
    NULL,                 // Pointer to logon ID
    cred_ptr,            // Package specific data
    NULL,                 // Pointer to GetKey() func
    NULL,                 // Value to pass to GetKey()
    phCreds,              // (out) Cred Handle
    &tsExpiry             // (out) Lifetime (optional)
);  

我不明白如何在此处提供凭据的详细信息。我想在这里使用kerberos。

cred_ptr 应该是指向https://docs.microsoft.com/en-us/windows/win32/api/credssp/ns-credssp-credssp_cred 的指针 但是MSDN只是说

pSpnegoCred

指向一组协商凭据的指针。

我该如何准确填写?有没有人对此有更好的理解?

感谢您的宝贵时间。

【问题讨论】:

    标签: c++ kerberos sspi


    【解决方案1】:

    如果使用 kerberos 提供程序,则传递 SEC_WINNT_AUTH_IDENTITY,而不是 CREDSSP_CRED。

    看看AcquireCredentialsHandle (Kerberos),您正在查看的页面是针对 CredSSP 的,但并没有说明清楚。

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2017-05-18
      • 2018-05-27
      • 1970-01-01
      • 2017-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多