Мы автоматизируем 30-дневный процесс обновления ключа расшифровки Kerberos, используя «зашифрованный» пароль, хранящийся в текстовом файле, для создания необходимого объекта PSCredential для команды Powershell new-azureADSSOAuthenticationContext.
Это работает, но я хочу повысить общую безопасность и поэтому хочу исключить объект PSCredential для глобального администратора нашего клиента в Azure.
Я видел, что команда new-azureADSSOAuthenticationContext также может быть скармливаема с токеном доступа (через параметр -token). Токен доступа я могу получить, используя сертификат, хранящийся в гораздо более безопасном машинном хранилище сертификатов, используя "Get-MsalToken"
На данный момент я создал приложение Azure, назначил его SecurityPrincipal роль глобального администратора (в разделе «Корпоративные приложения»), создал самозаверяющий сертификат (хранится в личном хранилище компьютера) и загрузил этот сертификат в приложение Azure.
Я получаю токен с помощью: $Token = Get-MsalToken -ClientId $ClientId -TenantId $TenantId -ClientCertificate $Certificate -RedirectUri "http://bla.com"
Это работает, и я также могу использовать токен в new-azureADSSOAuthenticationContext.
Но когда я затем вызываю Update-AzureADSSOForest -OnPremCredentials $OnpremCred, я получаю следующую ошибку:
При запуске в «новом» PowerShell 7: Строка | 133 | Update-AzureADSSOForest -OnPremCredentials $OnpremCred | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | Не удалось загрузить тип 'System.ServiceModel.Web.WebChannelFactory`1' из сборки 'System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, | PublicKeyToken=31bf3856ad364e35'.
При запуске под "старым" Powershell 5.1: Update-AzureADSSOForest : Не удалось загрузить информацию об учетной записи компьютера. Сообщение об ошибке: Запрос DesktopSsoNumOfDomains был сделан с недопустимым authenticatedToken. Значение:'' В C:\Scripts\DEV-MIHA\KerberosKeyRollover\M365_Kerberos_Key_Rollover.ps1:133 символ:1
- Обновление-AzureADSSOForest -OnPremCredentials $OnpremCred
-
+ CategoryInfo : NotSpecified: (:) [Update-AzureADSSOForest], Exception + FullyQualifiedErrorId : System.Exception,Microsoft.KerberosAuth.Powershell.PowershellCommands.UpdateAzureADSSOForestCommand
Подсказка: Я прочитал довольно много часов относительно общей проблемы - и пока не нашел никакого решения для этой проблемы. За исключением того, что некоторые утверждают, что это в настоящее время невозможно.
Но, возможно, кто-то уже добился того, чего хочу я.
Предложения приветствуются. :-)
решение1
Это не ответ, но, возможно, прогресс в этом направлении. Вот что я пока нашел:
Во-первых,Новый AzureADSSOAuthenticationContextне проверяет токен, который вы предоставляете через -Token
параметр, пока вы фактически не запустите команду, которая на него полагается (например, Get-AzureADSSOStatus
или Update-AzureADSSOForest
) — например, следующая команда будет выполнена без ошибок:
New-AzureADSSOAuthenticationContext -Token "12345" -Tenantid <YourTenantId>
Во-вторых, основанный на некоторых исследованиях того, как New-AzureADSSOAuthenticationContext
работает использованиеСкрипач, мне удалось заставить его работать сПолучить-MsalTokenсгенерированный токен с использованием интерактивного входа следующим образом:
$TenantId = '<Your Tenant ID>'
Import-Module 'C:\Program Files\Microsoft Azure Active Directory Connect\AzureADSSO.psd1'
$Token = Get-MsalToken -ClientId '55747057-9b5d-4bd4-b387-abf52a8bd489' -TenantId $TenantId -Interactive -Scopes 'https://proxy.cloudwebappproxy.net/registerapp/.default'
New-AzureADSSOAuthenticationContext -Token $Token.AccessToken -TenantId $TenantId
Get-AzureADSSOStatus | ConvertFrom-Json
Вышеуказанное позволит Get-AzureADSSOStatus
правильно возвращать, что должно быть хорошим началом. Следующая часть проблемы, вероятно, заключается в том, чтобы заставить приложение-прокси Azure AD Connect принятьпредоставление клиентских учетных данныхтокен вместо пользователяпредоставление кода авторизациитокен.