Проще говоря: могу ли я сгенерировать в C ++ некоторую текстовую информацию - токен пользователя, токен сеанса, токен доступа (?) - в настоящий момент вошедшего в систему пользователя Windows, а затем где-нибудь проверить эту текстовую информацию (аутентифицировать пользователя)еще (другой компьютер в домене)?
У меня есть два компьютера.В первом случае пользователь должен иметь возможность подключаться через клиентское приложение к моему серверному приложению, запущенному на втором компьютере.Он должен использовать проверку подлинности Windows, чтобы сервер использовал свои группы окон для получения некоторой информации - без отправки имени пользователя / пароля.Моя идея (не знаю, возможно ли это), что клиентский компьютер / процесс знает текущего пользователя, поэтому он получит маркер доступа пользователя или что-то в этом роде, передаст его на сервер (в качестве строкового параметра), сервер проверит, чтоэта строка токена действительна и получит имя пользователя Windows и его групп для следующих операций, вот что мне нужно.
Возможно ли это только с одной информацией (этот токен доступа / токен сеанса или какназывать это) отправлено с клиента на сервер?(http-сервер, я просто хочу отправить этот строковый токен один раз с одним запросом входа в систему, который в настоящее время используется для других проприетарных способов аутентификации, без установления связи / согласования или чего-то подобного, если это возможно).Я использую C ++.
В настоящее время я нашел два способа (вероятно, способы, как этого не делать;))
1) Такие функции, как OpenProcessToken, GetTokenInformation - это дает мне доступ к токену доступа, ноэто просто дескриптор, и я могу использовать его, вероятно, только в моем процессе, невозможно отправить его куда-то еще ...
2) Такие функции, как AcquireCredentialsHandle, InitializeSecurityContext, AcceptSecurityContext - сегодня я провел много времени с этим- Я сделал несколько тестовых приложений с использованием этих функций, просто запустив их в одном процессе, в настоящее время я не совсем уверен, как это должно быть сделано посредством «текстовой» связи между двумя компьютерами, но это не важно - кажется, что нужно сделать больше раундов- клиент создает что-то (контекст, учетные данные, токен, ...), отправляет это на сервер, сервер делает что-то, отвечает клиенту, клиент получает результат и т. д. Можно ли это сделать, просто создав «токен сеанса» и отправивэто (например, с доменом @ username, если необходимо) без других данных goinснова туда и обратно?
Любая помощь приветствуется, спасибо!
РЕДАКТИРОВАТЬ: Исходя из первых комментариев ниже, мне кажется, мне нужно прояснить это подробнее: представьте, что пользователь запускает веб-браузер и подключается к моемусерверное приложение где-то еще.Он хочет отправлять команды типа «CONNECT» и «DO_STUFF».Серверное приложение будет делать do_stuff, только если этот пользователь сможет подключиться первым.Но этот пользователь может подключиться, например, только если он является членом некоторой группы Windows (используется проверка подлинности Windows, а не некоторые проприетарные пользователи и пароли).Таким образом, сервер должен проверить, является ли этот пользователь действительным членом этой группы.Но сервер может сделать это только на основе текстовой информации, предоставленной пользователем, конечно.Ну, пользователь может отправить свое имя пользователя и пароль windows для аутентификации серверным приложением (должно быть сделано с помощью функции C ++ LogonUser или чего-либо еще), но это опасно, и я не хочу, чтобы пользователь где-то вводил свое имя пользователя и пароль, я просто хочу его«нажать кнопку входа в систему», и C ++ позаботится об остальном, потому что он может проверять данные текущего сеанса, он уже вошел в систему. Моя идея состоит в том, чтобы просто предоставить имя пользователя и какой-то строковый токен пользователя (токен сеанса, токен доступа,я не знаю точную терминологию), которая будет сгенерирована пользовательским клиентским приложением (использующим Kerberos, NTLM, я не знаю), и сервер получит эту строковую информацию, он проверит этот токен, чтобы убедиться, что «это действительно»токен действительного пользователя windows и вот группы, к которым он принадлежит "... что-то в этом роде.Надеюсь, это объяснение поможет.