Имя цели SspiPromptForCredentials - PullRequest
0 голосов
/ 08 июля 2019

Я разрабатывал приложение, которое использует SSPI для аутентификации клиент / сервер. Все отлично работает, но остается один вопрос. Первый аргумент SspiPromptForCredentials - это имя цели ... Но для чего оно на самом деле используется? Я могу буквально поставить что угодно в качестве целевого имени, мой код будет работать. Я даже не вижу нигде написанного (в графическом интерфейсе). Это связано с методом аутентификации? Я использую переговоры.

Спасибо за вашу помощь:)

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Ответ немного мягче, чем вы думаете.SSPI поддерживает произвольные типы учетных данных, поэтому API должен предоставлять способ запрашивать учетные данные, которые понимает конкретный SSP, без необходимости предоставления стороннего API.Вы не можете запустить пользовательский интерфейс из самого SSP, потому что он работает в LSA, поэтому между разработчиком приложений и SSP существует неявный договор о том, что если вам нужны специальные учетные данные, вам нужно будет позвонить SspiPromptForCredentials.

В некоторых случаях возможно, что SSP, который вы пытаетесь использовать, может потребовать знания цели для формирования формы маршалированных учетных данных.Часто это не так.

Переговоры просто не требуют этой информации, потому что вводимые вами учетные данные не зависят от цели.

0 голосов
/ 08 июля 2019

Я думаю, это может быть связано с тем, как учетные данные сохраняются в диспетчере учетных данных.

Пример только SspiPromptForCredentials , который я могу найти в MSDN, использует просто бесполезную строку ("Target").

Для CredUIConfirmCredentials MSDN говорит:

Указатель на завершающуюся нулем строку, которая содержит имя цели для учетных данных, обычно имя домена или приложения сервера. Это должно быть то же значение, которое передано как pszTargetName в CredUIPromptForCredentials или CredUICmdLinePromptForCredentials

CredUICmdLinePromptForCredentials имеет аналогичный параметр и для этого MSDN говорит:

Указатель на завершающуюся нулем строку, содержащую имя цели для учетных данных, обычно имя сервера.

Параметр pszTargetName используется для идентификации целевой информации и используется для хранения и получения учетных данных .

...

Учетные данные хранятся в диспетчере учетных данных на основе целевого имени. Каждое целевое имя хранится в максимально возможной степени, не конфликтуя с учетными данными, уже сохраненными в диспетчере учетных данных. Важным эффектом сохранения учетных данных по имени цели является то, что конкретный пользователь может иметь только одну учетную запись на цель, сохраненную в диспетчере учетных данных.

Эти другие функции CredUI, возможно, являются низкоуровневыми, но я думаю, что использование параметров такое же.

MSDN говорит о переговорах:

Чтобы разрешить Negotiate выбрать поставщика безопасности Kerberos, клиентское приложение должно предоставить имя участника-службы (SPN), имя участника-пользователя (UPN) или имя учетной записи NetBIOS в качестве целевого имени . В противном случае Negotiate всегда выбирает провайдера безопасности NTLM.

...