![多个 Azure 活动目录,我怀疑它们互相干扰](https://linux22.com/image/715244/%E5%A4%9A%E4%B8%AA%20Azure%20%E6%B4%BB%E5%8A%A8%E7%9B%AE%E5%BD%95%EF%BC%8C%E6%88%91%E6%80%80%E7%96%91%E5%AE%83%E4%BB%AC%E4%BA%92%E7%9B%B8%E5%B9%B2%E6%89%B0.png)
我已经在我的 MSDN Azure 订阅下创建了一个 Azure Active 目录以进行测试。
该订阅与我们的主要公司 Azure AD 绑定。
不久前,我启用了 Azure Active Directory Identity Protection 来对我自己的 AD 进行实验。
然而我怀疑它会干扰(不是最好的词)应用程序登录,因为我经常看到警告说我的登录在 oauth 流程中被阻止,但关闭对话框后,它可以正常工作。
我怀疑在执行可能不局限于特定目录的 oauth 流时,该流会尝试连接到两个目录?
有没有办法删除 Azure 活动目录,如果我选择 Azure 门户右上角的目录,它会立即显示我的登录被阻止。
我看不出如果不切换到该目录就管理该目录的方法。
编辑:
powershell 中的一个示例:
"Before Login"
Get-AzureRmContext
Login-AzureRmAccount
"After login"
Get-AzureRmContext
这是我在登录时看到的屏幕,但“登录后”显示已成功登录。
答案1
我怀疑在执行可能不局限于特定目录的 oauth 流时,该流会尝试连接到两个目录?
实际上,不同的目录不会互相干扰。每个目录都有其唯一的目录 ID,称为租户 ID。但我想知道您登录了哪种应用程序并发生了此问题。如果应用程序需要连接 Azure Active Directory,它将需要该目录的租户 ID,而不仅仅是您的 Azure 帐户。
我想明确指出的是,同一 Azure 帐户下的不同目录不会互相干扰。该目录未被订阅。一个订阅只能属于一个目录,但一个目录可以有多个订阅。
有没有办法删除 Azure 活动目录。
当然,您可以删除一个 Azure Active Directory。只需单击 Azure Active Directory 门户中的“删除目录”按钮即可。这可能需要一些前提条件。您可以参考本文完成删除过程。
此外,您应该检查该应用程序的配置或清除浏览器的缓存。我的一个 Azure 帐户下有很多目录,但我从未遇到过干扰。
希望这可以帮助!
答案2
看来 Login-AzureRmAccount 将试图登录到与 Azure 租户绑定的所有目录/订阅(不确定我是否使用了正确的术语)。
我们主 AD 中的主要用户帐户是虚拟 AD 帐户上的来宾用户(这会导致问题)。
$context = Get-AzureRmContext
if($credential -eq $null)
{
$credential = Get-Credential
}
if($context.Account -eq $null)
{
Login-AzureRmAccount
$context = Get-AzureRmContext
}
$tenants = New-Object System.Collections.ArrayList
Get-AzureRmTenant #tenant id would appear here
Get-AzureRmTenant | ForEach-Object {
Connect-AzureAD -Credential $credential -TenantId $_.TenantId
$detail = Get-AzureADTenantDetail -Verbose
$tenants.Add($detail)
}
$tenants | Out-GridView #it would not apepar here as Connect-AzureAD would fail
使用上述代码时,我能够在 Get-AzureRmTenant 中看到有问题的租户 ID。
当您尝试切换以查看该活动目录时,新的 Azure 门户会将您登录到租户,这意味着我无法管理该帐户。
但是旧门户没有,所以我能够管理 AD 帐户。
使用旧门户,我添加了一个单独的 Microsoft 帐户外部用户,以该身份登录并删除了我的主用户帐户(考虑到这一点,这在 AzureAD(非 RM)powershell 中也可能实现)。
然后,我删除了 Azure AD 中的所有应用程序,但留下了一些未处理的服务主体。最初在 powershell 中删除这些服务主体失败,因为有些是 Microsoft 服务主体(即使忽略错误)。
但这是通过执行 foreach 循环而不是直接使用管道来实现的。
Connect-AzureAD -TenantId #tenantidhere
$sp = Get-AzureADServicePrincipal
$sp | ForEach-Object {
Remove-AzureADServicePrincipal -ObjectId $_.ObjectId -ErrorAction Ignore
}