我们使用存储在文本文件中的“加密”密码自动执行 30 天 Kerberos 解密密钥滚动更新过程,为 Powershell 命令 new-azureADSSOAuthenticationContext 创建必要的 PSCredential 对象。
这是可行的 - 但我想提高整体安全性,因此想消除 Azure 上租户的全局管理员的 PSCredential 对象。
我已经看到 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, Version=4.0.0.0, Culture=neutral, | PublicKeyToken=31bf3856ad364e35”加载类型“System.ServiceModel.Web.WebChannelFactory`1”。
在“旧”Powershell 5.1 下运行时:Update-AzureADSSOForest:上传计算机帐户信息失败。错误消息:DesktopSsoNumOfDomains 请求使用了无效的 authenticatedToken。值:'' 在 C:\Scripts\DEV-MIHA\KerberosKeyRollover\M365_Kerberos_Key_Rollover.ps1:133 char: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
使用的一些调查Fiddler,我已经设法让它与获取 MsalTokenGet-MsalToken使用交互式登录生成的token如下:
$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 代理应用程序接受应用程序的客户端凭证授予令牌而不是用户的授权码授予令牌。