.NET: передача учетных данных пользователя через транспортный уровень

Каков наилучший / самый простой способ передачи учетных данных пользователя (Active Directory) через транспортный уровень.

У меня есть две системы A и B, связанные со сторонним уровнем сообщений C.

Есть ли способ (предпочтительно в.NET) каким-то образом сохранить / сериализовать учетные данные аутентифицированного пользователя на стороне A, передать его через C, затем десериализовать его на стороне B и затем сделать вызов нисходящему система D, использующая десериализованные учетные данные?

2 ответа

Чтобы "отключить" учетные данные в другой системе, которая может быть аутентифицирована одним из интерфейсов аутентификации AD, вам потребуется либо протокол, защищенный от подражания (например, Kerberos), сами необработанные учетные данные (иногда называемые "базовыми" или "именем пользователя"). /password", но также может при определенных обстоятельствах быть чем-то вроде пары ключей RSA) и, необязательно, структурой, в которой можно обернуть эти учетные данные (например, WS-Sec, SAML).

Токен доступа, сгенерированный LSA Windows, действителен только в той системе, в которой был сгенерирован токен - если вы сериализовали и десериализовали токен из одной системы в другую, LSA не примет его как доказательство того, что процесс был аутентифицирован эта целевая система и имела какое-либо право на доступ к любому защищенному ресурсу в системе. В противном случае вы будете говорить о системе, подверженной атакам повторного воспроизведения (взятие контекста безопасности из одного блока и его повторное воспроизведение - злонамеренно или иным образом, модель угрозы безопасности не будет заботиться - о другом).

Таким образом, "самый простой" способ сделать это состоит в том, чтобы ваш код предлагал пользователю ввести свое имя пользователя и пароль. Это также сценарий, наиболее подверженный недостаткам безопасности, и любая разумная организация захлебнется, если их приложения сделают что-то грубое, но это теоретический вариант.

Лучше было бы найти способ для межсистемной связи включить встроенную поддержку протокола аутентификации - см. GSS-API для одного кроссплатформенного API, который часто работает в этих контекстах.

Это называется олицетворением, но без каких-либо подробностей о базовых системах я не могу точно сказать, будет ли это поддерживаться.

Если система основана на WCF, это определенно возможно. Эта страница MSDN содержит все детали.

Другие вопросы по тегам