Я хочу протестировать LSALOGONUSER для проверки подлинности на основе сертификата без использования смарт-карты.C#

Место общения программистов C#
Ответить
Anonymous
 Я хочу протестировать LSALOGONUSER для проверки подлинности на основе сертификата без использования смарт-карты.

Сообщение Anonymous »

У меня есть ссылка здесь. Кто-нибудь может сказать, что не так в коде. Какие изменения мне потребуются, если это не пользователь домена, а локальная учетная запись, не подключенная к какому-либо домену?
У меня есть еще одна хорошая справочная ссылка здесь, но здесь также есть какие изменения мне потребуются если у меня нет смарт-карты, и я получу сертификаты из личного хранилища пользователей
Я попробовал этот метод, но получить LSALOGIN не удалось, как указано в теме
В эталонном коде для пользователя, не являющегося пользователем домена, я предоставил необходимые SCTCBPriviledge. После этого я заполнил данные сертификата для LSALOGON, как показано ниже, из личного хранилища сертификатов. Но метод не работает, как показано ниже в выводе

Код: Выделить всё

    BOOL ConstructAuthCertInfo(const KERB_CERTIFICATE_UNLOCK_LOGON& rkiulIn,LPBYTE* ppbAuthInfo, ULONG* pulAuthInfoLen)
{
UNICODE_STRING DomainName;
UNICODE_STRING UserName;
UNICODE_STRING Password;
NTSTATUS Status;
ULONG_PTR Ptr;
ULONG AuthInfoLength;
wstring WProvName;
DWORD ProvSize = 0;
wstring containerName;
DWORD contSize = 0;
HCRYPTPROV hProv;
DWORD dwKeySpec;

// Fetching the certificate context from the certificate store
// and recieving the CSP handle for the user certificate
HCERTSTORE      hStoreHandle = NULL;
PCCERT_CONTEXT  pCertContext = NULL;
LPCTSTR pszStoreName = _T("MY");
CERT_CREDENTIAL_INFO certInfo;
HCRYPTHASH hHash;
BOOL bStatus;
DWORD dwHashLen = CERT_HASH_LENGTH;
LPWSTR szMarshaledCred = NULL;
HANDLE hToken;

hStoreHandle = CertOpenSystemStore(NULL, pszStoreName);

if (hStoreHandle)
{
// Since my certificate store has only one user certificate, tring to retrieve PCERT_CONTEXT for it
pCertContext = CertFindCertificateInStore(
hStoreHandle,
PKCS_7_ASN_ENCODING | X509_ASN_ENCODING,
0,
CERT_FIND_ANY,
NULL,
NULL);

if (pCertContext)
{

BOOL bFreeHandle;

// acquire private key container to this certificate
if (CryptAcquireCertificatePrivateKey(pCertContext, CRYPT_ACQUIRE_ALLOW_NCRYPT_KEY_FLAG, NULL, &hProv, &dwKeySpec, &bFreeHandle))
{
cout 

Подробнее здесь: [url]https://stackoverflow.com/questions/79108691/i-want-to-test-lsalogonuser-to-do-certificate-based-authentication-without-the-u[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»