【问题标题】:Azure AD application with Global Administrator rights具有全局管理员权限的 Azure AD 应用程序
【发布时间】:2017-03-15 20:15:09
【问题描述】:

所以我正在尝试在 azure AD 上设置一个应用程序,该应用程序可以删除用户等。

我已注册应用程序并使用客户端 ID 和安全证书获取访问令牌。

我能够授予应用程序创建用户的权限并且工作正常,但是当我通过图形 API 删除时,我得到了 403 Insufficient permissions to complete the operation。

我正在通过 graph rest API 尝试这个。我试图删除的用户也是通过 rest 调用创建的。用户与应用程序在同一个租户中,所以我不想从多个租户中删除用户。

看来我需要做的是给应用程序全局管理员或公司管理员权限,但我对在哪里以及如何执行此操作感到困惑。

任何帮助将不胜感激。

【问题讨论】:

    标签: azure azure-active-directory azure-ad-b2c azure-ad-graph-api


    【解决方案1】:

    看看我的回答here

    您可以提升应用程序在租户中的访问级别 通过将该应用程序的服务主体添加到Company Administrator 目录角色。这将使应用程序相同 作为公司管理员的权限级别,谁可以做 任何事物。您可以按照这些相同的说明处理任何类型的 目录角色取决于您要授予的访问级别 这个应用程序。

    请注意,这只会影响您的应用在租户中的访问权限。

    此外,您必须已经是租户的公司管理员才能遵循这些说明。

    为了进行更改,您需要安装Azure Active Directory PowerShell Module

    安装模块后,向租户进行身份验证 您的管理员帐户:

    Connect-MSOLService
    

    然后我们需要获取我们两个Service Principal的Object ID 想要提升,以及租户的公司管理员角色。

    按应用 ID GUID 搜索服务主体:

    $sp = Get-MsolServicePrincipal -AppPrincipalId <App ID GUID>
    

    按名称搜索目录角色

    $role = Get-MsolRole -RoleName "Company Administrator"
    

    现在我们可以使用Add-MsolRoleMember 命令将此角色添加到 服务主体。

    Add-MsolRoleMember -RoleObjectId $role.ObjectId -RoleMemberType ServicePrincipal -RoleMemberObjectId $sp.ObjectId
    

    要检查一切是否正常,让我们找回所有的成员 公司管理员角色:

    Get-MsolRoleMember -RoleObjectId $role.ObjectId
    

    您应该会在该列表中看到您的应用程序,其中RoleMemberTypeServicePrincipalDisplayName 是您的姓名 应用。

    现在您的应用程序应该能够执行任何图形 API 调用 公司管理员可以在没有用户登录的情况下执行所有操作, 使用客户端凭据流。

    如果这有帮助,请告诉我!

    【讨论】:

    • 不过要小心这个,公司管理员本质上是 AAD 中的最高角色,允许应用程序做任何它想做的事情。您应该也可以使用新的 AAD cmdlet 来执行此操作,而无需使用旧的。
    • 我认为这会起作用,但似乎我无法保持开放的会话。我运行了 connect-azureAD 命令,但随后它关闭了会话。当我想到这一点时,我会更新,但这看起来很有希望。
    • 尝试使用旧的“MSOL”cmdlet。我发现它们更加一致。
    • 这与网络有关,但是一旦我离开我们的专用网络,我就能够遵循您的命令。我使用了 azureAD cmdlet 的 2.0 版本,但您的步骤使其正常工作。我将编辑您的回复,以便为可能偶然发现此问题的任何其他人提供更新版本的命令。感谢您的帮助!
    【解决方案2】:

    更新

    上面的答案已经更新为使用Azure Active Directory V2 PowerShell

    如果您尚未安装 AzureAD 模块,则需要安装它。有关该模块的更多信息,请参阅Azure Active Directory PowerShell Module Version for Graph for Azure AD administrative tasks 或直接运行:

    Install-Module AzureAD
    

    安装模块后,使用管理员帐户向租户进行身份验证:

    Connect-AzureAD
    

    然后我们需要获取我们想要提升的服务主体,以及您的租户的公司管理员角色。

     $sp = Get-AzureRmADServicePrincipal | Where DisplayName -eq '<service-principal-name>'
    

    按名称搜索目录角色

    $role = Get-AzureADDirectoryRole | Where DisplayName -eq 'Company Administrator'
    

    现在我们可以使用Add-AzureADDirectoryRoleMember 命令将此角色添加到服务主体。

    Add-AzureADDirectoryRoleMember -ObjectId $role.ObjectId -RefObjectId $sp.Id
    

    要检查一切是否正常,让我们取回公司管理员角色的所有成员:

    Get-AzureADDirectoryRoleMember -ObjectId $role.ObjectId
    

    您应该会在该列表中看到您的应用程序,其中 DisplayName 是您的应用程序的名称。

    现在,您的应用程序应该能够使用客户端凭据流执行公司管理员可以执行的任何图形 API 调用,而无需用户登录。

    【讨论】:

    • 就我而言,我必须将 $sp.Id 更改为 $sp.ObjectId 像这样:Add-AzureADDirectoryRoleMember -ObjectId $role.ObjectId -RefObjectId $sp.ObjectId
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    相关资源
    最近更新 更多