Уровень олицетворения олицетворение windows

Олицетворение и возвращение Impersonating and Reverting

Эта статья относится к Windows. This article applies to Windows.

Сведения о ASP.NET Core см. в разделе ASP.NET Core Security. For information about ASP.NET Core, see ASP.NET Core Security.

Иногда может потребоваться получить токен учетной записи Windows для олицетворения учетной записи Windows. Sometimes you might need to obtain a Windows account token to impersonate a Windows account. Например, приложению ASP.NET может требоваться действовать от лица разных пользователей в разное время. For example, your ASP.NET-based application might have to act on behalf of several users at different times. Ваше приложение может принять токен, представляющий администратора, из служб IIS, выполнить олицетворение этого пользователя, выполнить операцию и вернуться к предыдущему удостоверению. Your application might accept a token that represents an administrator from Internet Information Services (IIS), impersonate that user, perform an operation, and revert to the previous identity. Далее он может принять токен из служб IIS, который представляет пользователя с меньшим набором прав, выполнить некую операцию и снова вернуться. Next, it might accept a token from IIS that represents a user with fewer rights, perform some operation, and revert again.

В ситуациях, когда приложение должно олицетворять учетную запись Windows, не подключенную к текущему потоку службами IIS, необходимо получить токен для этой учетной записи и с его помощью активировать эту учетную запись. In situations where your application must impersonate a Windows account that has not been attached to the current thread by IIS, you must retrieve that account’s token and use it to activate the account. Это можно сделать, выполнив следующие задачи. You can do this by performing the following tasks:

Получите токен учетной записи для конкретного пользователя путем вызова неуправляемого метода LogonUser. Retrieve an account token for a particular user by making a call to the unmanaged LogonUser method. Этот метод отсутствует в библиотеке базовых классов .NET, но находится в неуправляемой advapi32.dll. This method is not in the .NET base class library, but is located in the unmanaged advapi32.dll. Доступ к методам в неуправляемом коде является сложной операцией и выходит за рамки данного обсуждения. Accessing methods in unmanaged code is an advanced operation and is beyond the scope of this discussion. Дополнительные сведения см. в разделе Взаимодействие с неуправляемым кодом. For more information, see Interoperating with Unmanaged Code. Дополнительные сведения о методе LogonUser и библиотеке advapi32.dll см. в документации Platform SDK. For more information about the LogonUser method and advapi32.dll, see the Platform SDK documentation.

Создайте новый экземпляр класса WindowsIdentity, передав токен. Create a new instance of the WindowsIdentity class, passing the token. Следующий код демонстрирует этот вызов, где hToken представляет токен Windows. The following code demonstrates this call, where hToken represents a Windows token.

Начните олицетворение, создав новый экземпляр класса WindowsImpersonationContext и инициализировав его с помощью метода WindowsIdentity.Impersonate инициализации класса, как показано в следующем коде. Begin impersonation by creating a new instance of the WindowsImpersonationContext class and initializing it with the WindowsIdentity.Impersonate method of the initialized class, as shown in the following code.

Если это олицетворение больше не требуется, вызовите метод WindowsImpersonationContext.Undo для отмены олицетворения, как показано в следующем коде. When you no longer need to impersonate, call the WindowsImpersonationContext.Undo method to revert the impersonation, as shown in the following code.

Читайте также:  Что будет если срок активации windows истекает

Если доверенный код уже подключил WindowsPrincipal объект к потоку, можно вызвать метод экземпляра impersonate, который не принимает маркер учетной записи. If trusted code has already attached a WindowsPrincipal object to the thread, you can call the instance method Impersonate, which does not take an account token. Обратите внимание, что это целесообразно только в том случае, если объект WindowsPrincipal в потоке представляет пользователя, отличного от того, под которым выполняется процесс. Note that this is only useful when the WindowsPrincipal object on the thread represents a user other than the one under which the process is currently executing. Например, такая ситуация может возникнуть при использовании ASP.NET с включенной проверкой подлинности Windows и отключенным олицетворением. For example, you might encounter this situation using ASP.NET with Windows authentication turned on and impersonation turned off. В этом случае процесс выполняется под учетной записью, настроенной в IIS, тогда как текущий участник представляет пользователя Windows, который обращается к странице. In this case, the process is running under an account configured in Internet Information Services (IIS) while the current principal represents the Windows user that is accessing the page.

Обратите внимание, что ни олицетворение , ни Отмена изменений не изменяет объект Principal ( IPrincipal ), связанный с текущим контекстом вызова. Note that neither Impersonate nor Undo changes the Principal object (IPrincipal) associated with the current call context. Вместо этого при олицетворении и возврате изменяется маркер, связанный с текущим процессом операционной системы. Rather, impersonation and reverting change the token associated with the current operating system process.

Использование олицетворения при обеспечении безопасности транспорта Using Impersonation with Transport Security

Олицетворение — это способность серверного приложения принимать на себя удостоверение клиента. Impersonation is the ability of a server application to take on the identity of the client. Обычно службы используют олицетворение при проверке доступа к ресурсам. It is common for services to use impersonation when validating access to resources. Серверное приложение выполняется с использованием учетной записи службы, но когда сервер принимает клиентское подключение, он олицетворяет клиента для выполнения проверки доступа с использованием учетных данных клиента. The server application runs using a service account, but when the server accepts a client connection, it impersonates the client so that access checks are performed using the client’s credentials. Безопасность транспорта — это механизм, используемый как для передачи учетных данных, так и для обеспечения безопасности связи с использованием этих учетных данных. Transport security is a mechanism both for passing credentials and securing communication using those credentials. В этом разделе описывается использование безопасности транспорта в Windows Communication Foundation (WCF) с функцией олицетворения. This topic describes using transport security in Windows Communication Foundation (WCF) with the impersonation feature. Дополнительные сведения об олицетворении с использованием безопасности сообщений см. в разделе Делегирование и олицетворение. For more information about impersonation using message security, see Delegation and Impersonation.

Пять уровней олицетворения Five Impersonation Levels

В безопасности транспорта используется пять уровней олицетворения, как описано в приведенной ниже таблице. Transport security makes use of five levels of impersonation, as described in the following table.

Уровень олицетворения Impersonation level Описание Description
None None Серверное приложение не пытается олицетворить клиент. The server application does not attempt to impersonate the client.
Анонимный Anonymous Серверное приложение может выполнять проверки доступа с использованием учетных данных клиента, но не получает никакой информации об идентификации клиента. The server application can perform access checks against the client’s credentials, but does not receive any information about the client’s identity. Использовать этот уровень олицетворения имеет смысл только при обмене данными на компьютере, например по именованным каналам. This impersonation level is meaningful only for on-machine communication, such as named pipes. Если уровень Anonymous используется при удаленном подключении, он повышается до уровня олицетворения «Identify». Using Anonymous with a remote connection promotes the impersonation level to Identify.
Identify Identify Серверное приложение знает идентификацию клиента и может выполнить проверку доступа с использованием учетных данных клиента, но не может олицетворить клиент. The server application knows the client’s identity and can perform access validation against the client’s credentials, but cannot impersonate the client. Identify — это уровень олицетворения по умолчанию, используемый с учетными данными SSPI в WCF, если поставщик токенов не предоставляет другой уровень олицетворения. Identify is the default impersonation level used with SSPI credentials in WCF unless the token provider provides a different impersonation level.
Impersonate Impersonate Серверное приложение может получить доступ к ресурсам на компьютере-сервере в качестве клиента помимо выполнения проверок доступа. The server application can access resources on the server machine as the client in addition to performing access checks. Серверное приложение не может получить доступ к ресурсам на удаленных компьютерах, используя идентификацию клиента, поскольку олицетворяемый маркер не имеет сетевых учетных данных. The server application cannot access resources on remote machines using the client’s identity because the impersonated token does not have network credentials
Делегат Delegate Уровень олицетворения «Delegate» предоставляет те же возможности, что уровень Impersonate , а также позволяет серверному приложению получить доступ к ресурсам на удаленных компьютерах с использованием идентификации клиента и передавать эту идентификацию другим приложениям. In addition to having the same capabilities as Impersonate , the Delegate impersonation level also enables the server application to access resources on remote machines using the client’s identity and to pass the identity to other applications.

Важно! Для использования этих дополнительных функций учетная запись домена сервера должна быть помечена как доверенная для делегирования на контроллере домена. Important The server domain account must be marked as trusted for delegation on the domain controller to use these additional features. Этот уровень олицетворения нельзя использовать с учетными записями домена клиента, отмеченными как конфиденциальные. This level of impersonation cannot be used with client domain accounts marked as sensitive.

Уровни, наиболее часто используемые при обеспечении безопасности транспорта, — это Identify и Impersonate . The levels most commonly used with transport security are Identify and Impersonate . Не рекомендуется использовать уровни None и Anonymous в стандартных ситуациях, большинство транспортов не поддерживает использование этих уровней с проверкой подлинности. The levels None and Anonymous are not recommended for typical use, and many transports do not support using those levels with authentication. Уровень Delegate — это функция с широкими возможностями, которую следует использовать осторожно. The Delegate level is a powerful feature that should be used with care. Разрешение на делегирование учетных записей следует предоставлять только доверенным серверным приложениям. Only trusted server applications should be given the permission to delegate credentials.

Для использования уровней Impersonate или Delegate необходимо, чтобы серверные приложения имели привилегию SeImpersonatePrivilege . Using impersonation at the Impersonate or Delegate levels requires the server application to have the SeImpersonatePrivilege privilege. Приложение имеет эту привилегию по умолчанию, если оно выполняется от имени учетной записи в группе «Администраторы» или от имени учетной записи с идентификатором безопасности службы (сетевая служба, локальная служба или локальная система). An application has this privilege by default if it is running on an account in the Administrators group or on an account with a Service SID (Network Service, Local Service, or Local System). Для олицетворения не требуется проведения взаимной проверки подлинности клиента и сервера. Impersonation does not require mutual authentication of the client and server. Некоторые схемы проверки подлинности, поддерживающие олицетворение, такие как NTLM, нельзя использовать при проведении взаимной проверки подлинности. Some authentication schemes that support impersonation, such as NTLM, cannot be used with mutual authentication.

Проблемы соответствия транспорта и олицетворения Transport-Specific Issues with Impersonation

Выбор транспорта в WCF влияет на возможные варианты олицетворения. The choice of a transport in WCF affects the possible choices for impersonation. В этом разделе описываются проблемы, влияющие на стандартные транспорты HTTP и именованных каналов в WCF. This section describes issues affecting the standard HTTP and named pipe transports in WCF. Пользовательские транспорты имеют свои собственные ограничения поддержки олицетворения. Custom transports have their own restrictions on support for impersonation.

Транспорт именованных каналов Named Pipe Transport

К транспорту именованных каналов применяются следующие положения. The following items are used with the named pipe transport:

Транспорт именованных каналов предназначен для использования только на локальном компьютере. The named pipe transport is intended for use only on the local machine. Транспорт именованных каналов в WCF явным образом запрещает подключения между компьютерами. The named pipe transport in WCF explicitly disallows cross-machine connections.

Именованные каналы невозможно использовать с уровнем олицетворения Impersonate или Delegate . Named pipes cannot be used with the Impersonate or Delegate impersonation level. Именованный канал не может обеспечить выполнение гарантии на компьютере на этих уровнях олицетворения. The named pipe cannot enforce the on-machine guarantee at these impersonation levels.

Дополнительные сведения об именованных каналах см. в разделе Выбор транспорта. For more information about named pipes, see Choosing a Transport.

Транспорт HTTP HTTP Transport

Привязки, использующие транспорт HTTP ( WSHttpBinding и BasicHttpBinding ), поддерживают несколько схем проверки подлинности, как описано в описании проверки подлинности HTTP. The bindings that use the HTTP transport (WSHttpBinding and BasicHttpBinding) support several authentication schemes, as explained in Understanding HTTP Authentication. Поддерживаемый уровень олицетворения зависит от схемы проверки подлинности. The impersonation level supported depends on the authentication scheme. К транспорту HTTP применяются следующие положения. The following items are used with the HTTP transport:

Схема проверки подлинности Anonymous игнорирует олицетворение. The Anonymous authentication scheme ignores impersonation.

Basic Схема проверки подлинности поддерживает только Delegate уровень. The Basic authentication scheme supports only the Delegate level. Все более низкие уровни олицетворения обновляются. All lower impersonation levels are upgraded.

Схема проверки подлинности Digest поддерживает только уровни Impersonate и Delegate . The Digest authentication scheme supports only the Impersonate and Delegate levels.

Схема проверки подлинности NTLM , которую можно выбрать как прямо, так и посредством согласования, поддерживает только уровень Delegate на локальном компьютере. The NTLM authentication scheme, selectable either directly or through negotiation, supports only the Delegate level on the local machine.

Схема проверки подлинности Kerberos, которую можно выбрать только посредством согласования, используется на любом поддерживаемом уровне олицетворения. The Kerberos authentication scheme, which can only be selected through negotiation, can be used with any supported impersonation level.

Дополнительные сведения о транспорте HTTP см. в разделе Выбор транспорта. For more information about the HTTP transport, see Choosing a Transport.

Читайте также:  Windows search ищет не все
Оцените статью